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.
-
Spoljni ključ (Foreign Key) — u entitetu (Entity) navodite polje sa anotacijom
@ForeignKey, koje se odnosi na primarni ključ druge tabele. -
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.