Sobes.tech
Junior — Middle

Kā izveidot saiti starp divām tabulām datu bāzē, kas izmanto Room?

sobes.tech AI

Atbilde no AI

Room, saistība starp divām tabulām tiek izveidota ar ārējiem atslēgām un anotācijām, kā arī ar īpašām klasēm datu apvienošanai.

  1. Ārējā atslēga (Foreign Key) — entitātē (Entity) norādiet lauku ar anotāciju @ForeignKey, kas atsaucas uz citas tabulas primāro atslēgu.

  2. Saites — lai iegūtu saistītos datus, tiek izveidotas POJO klases ar anotācijām @Relation, kas ļauj iegūt iekļautus objektus no saistītajām tabulām.

Piemērs "viens pret daudz":

@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 // ārējā atslēga
)

// Klase lietotāja un viņa grāmatu iegūšanai
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Tādējādi Room automātiski savieno tabulas un ļauj iegūt saistītos datus caur DAO.