Junior — Middle
Jak nawiązać relację między dwoma tabelami w bazie danych korzystającej z Room?
sobes.tech AI
Odpowiedź od AI
W Room relacja między dwiema tabelami jest ustanawiana za pomocą kluczy obcych i adnotacji, a także za pomocą specjalnych klas do łączenia danych.
-
Klucz obcy (Foreign Key) — w encji (Entity) wskazujesz pole z adnotacją
@ForeignKey, które odwołuje się do klucza głównego innej tabeli. -
Relacje — aby uzyskać powiązane dane, tworzy się klasy POJO z adnotacjami
@Relation, które pozwalają na pobranie zagnieżdżonych obiektów z powiązanych tabel.
Przykład relacji "jeden do wielu":
@Entity
dane klasy User(
@PrimaryKey val userId: Int,
val name: String
)
@Entity(
foreignKeys = [ForeignKey(
entity = User::class,
parentColumns = ["userId"],
childColumns = ["userOwnerId"],
onDelete = ForeignKey.CASCADE
)]
)
dane klasy Book(
@PrimaryKey val bookId: Int,
val title: String,
val userOwnerId: Int // klucz obcy
)
// Klasa do pobierania użytkownika z jego książkami
dane klasy UserWithBooks(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val books: List<Book>
)
W ten sposób Room automatycznie połączy tabele i pozwoli na pobieranie powiązanych danych przez DAO.