Sobes.tech
Junior — Middle

Kako uspostaviti vezu između dve tabele u bazi podataka koja koristi Room?

sobes.tech АИ

Одговор од АИ

U Room-u, odnos između dve tabele se uspostavlja pomoću spoljnjih ključeva i anotacija, kao i pomoću specijalnih klasa za spajanje podataka.

  1. Spoljni ključ (Foreign Key) — u entitetu (Entity) navodite polje sa anotacijom @ForeignKey, koje se odnosi na primarni ključ druge tabele.

  2. Odnos — za dobijanje povezanih podataka, kreiraju se POJO klase sa anotacijama @Relation, koje omogućavaju dobijanje ugnježdenih objekata iz povezanih tabela.

Primer odnosa "jedan prema mnogo":

@Entity
data class User(
    @PrimaryKey val userId: Int,
    val name: String
)

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["userId"],
        childColumns = ["userOwnerId"],
        onDelete = ForeignKey.CASCADE
    )]
)
data class Book(
    @PrimaryKey val bookId: Int,
    val title: String,
    val userOwnerId: Int // spoljnji ključ
)

// Klasa za dobijanje korisnika sa njegovim knjigama
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Na ovaj način, Room automatski povezuje tabele i omogućava dobijanje povezanih podataka putem DAO-a.