Sobes.tech
Junior — Middle

Чӣ гуна пайваст кардани ду ҷадвал дар пойгоҳи додаҳо, ки Room-ро истифода мебарад?

sobes.tech AI

Ҷавоб аз AI

Дар Room, муносибати байни ду ҷадвал тавассути калидҳои хориҷӣ ва аннотацияҳо, инчунин бо истифода аз синфҳои махсус барои пайваст кардани маълумотҳо барқарор мешавад.

  1. Калиди хориҷӣ (Foreign Key) — дар объект (Entity), шумо майдони бо аннотатсияи @ForeignKey нишон медиҳед, ки ба калиди асосии дигар ҷадвал ишора мекунад.

  2. Муносибатҳо — барои гирифтани маълумоти вобаста, синфҳои POJO бо аннотатсияҳои @Relation сохта мешаванд, ки имкон медиҳанд, объектҳои дарунсохт аз ҷадвалҳои вобаста гирифта шаванд.

Масалан, муносибати "як ба бисёре":

@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 // калиди хориҷӣ
)

// Синф барои гирифтани корбар бо китобҳояш
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Тавре ки мебинед, Room автоматӣ таблиҳоро пайваст мекунад ва имкон медиҳад, ки маълумоти вобаста тавассути DAO гирифта шаванд.