Sobes.tech
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.

  1. Klucz obcy (Foreign Key) — w encji (Entity) wskazujesz pole z adnotacją @ForeignKey, które odwołuje się do klucza głównego innej tabeli.

  2. 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.