Sobes.tech
Junior — Middle

Come stabilire una relazione tra due tabelle in un database che utilizza Room?

sobes.tech AI

Risposta dell'AI

In Room, la relazione tra due tabelle viene stabilita tramite chiavi esterne e annotazioni, nonché con classi speciali per combinare i dati.

  1. Chiave Esterna (Foreign Key) — nell'entità (Entity), si indica un campo con l'annotazione @ForeignKey, che fa riferimento alla chiave primaria di un'altra tabella.

  2. Relazioni — per ottenere dati correlati, si creano classi POJO con annotazioni @Relation, che permettono di ottenere oggetti annidati da tabelle collegate.

Esempio di relazione "uno a molti":

@Entity
dati classe User(
    @PrimaryKey val userId: Int,
    val name: String
)

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["userId"],
        childColumns = ["userOwnerId"],
        onDelete = ForeignKey.CASCADE
    )]
)
dati classe Book(
    @PrimaryKey val bookId: Int,
    val title: String,
    val userOwnerId: Int // chiave esterna
)

// Classe per ottenere l'utente con i suoi libri
dati classe UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

In questo modo, Room collegherà automaticamente le tabelle e permetterà di ottenere dati correlati tramite il DAO.