Junior — Middle
Πώς να δημιουργήσετε μια σχέση μεταξύ δύο πινάκων σε μια βάση δεδομένων που χρησιμοποιεί το Room;
sobes.tech AI
Απάντηση από AI
Στο Room, η σχέση μεταξύ δύο πινάκων καθορίζεται μέσω εξωτερικών κλειδιών και σχολίων, καθώς και με ειδικές κλάσεις για τη συνένωση δεδομένων.
-
Εξωτερικό Κλειδί (Foreign Key) — στην οντότητα (Entity), δηλώνετε ένα πεδίο με το σχόλιο
@ForeignKey, που αναφέρεται στο πρωτεύον κλειδί ενός άλλου πίνακα. -
Σχέσεις — για την απόκτηση σχετικών δεδομένων, δημιουργούνται κλάσεις 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.