Bire bir ilişkileri tanımlama ve sorgulama
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
İki öğe arasındaki bire bir ilişki, üst öğenin her örneğinin alt öğenin tam olarak bir örneğine karşılık geldiği ve bunun tersi de geçerli olan bir ilişkidir.
Örneğin, kullanıcının sahip olduğu bir şarkı kitaplığının bulunduğu bir müzik yayını uygulamasını düşünün. Her kullanıcının yalnızca bir kitaplığı vardır ve her kitaplık tam olarak bir kullanıcıya karşılık gelir. Bu nedenle, User
öğesi ile Library
öğesi arasında bire bir ilişki vardır.
Veritabanınıza bire bir ilişkileri tanımlamak ve sorgulamak için aşağıdaki adımları uygulayın:
- İlişkiyi tanımlayın: Her iki varlık için de sınıflar oluşturun ve bir sınıfın diğerinin birincil anahtarına referans vermesini sağlayın.
- Öğeleri sorgulayın: İlişkiyi yeni bir veri sınıfında modelleyin ve ilgili verileri almak için bir yöntem oluşturun.
İlişkiyi tanımlama
Bire bir ilişki tanımlamak için önce iki öğenizin her biri için bir sınıf oluşturun. Tüzel kişilerden biri, diğer tüzel kişinin birincil anahtarına referans veren bir değişken içermelidir.
Kotlin
@Entity
data class User(
@PrimaryKey val userId: Long,
val name: String,
val age: Int
)
@Entity
data class Library(
@PrimaryKey val libraryId: Long,
val userOwnerId: Long
)
Java
@Entity
public class User {
@PrimaryKey public long userId;
public String name;
public int age;
}
@Entity
public class Library {
@PrimaryKey public long libraryId;
public long userOwnerId;
}
Varlıkları sorgulayın
Kullanıcıların listesini ve ilgili kitaplıkları sorgulamak için öncelikle iki öğe arasındaki bire bir ilişkiyi modellemeniz gerekir.
Bunu yapmak için her örneğin üst öğenin bir örneğini ve alt öğenin ilgili örneğini barındırdığı yeni bir veri sınıfı oluşturun. @Relation
ek açıklamasını alt öğe örneğine ekleyin. parentColumn
, üst öğenin birincil anahtar sütununun adına, entityColumn
ise alt öğenin üst öğenin birincil anahtarına referans veren sütununun adına ayarlanmalıdır.
Kotlin
data class UserAndLibrary(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val library: Library
)
Java
public class UserAndLibrary {
@Embedded public User user;
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
public Library library;
}
Son olarak, DAO sınıfına, üst öğeyle alt öğeyi eşleyen veri sınıfının tüm örneklerini döndüren bir yöntem ekleyin. Bu yöntem için Room'un iki sorgu çalıştırması gerekir. Bu nedenle, bu yönteme @Transaction
notunu eklemeniz gerekir. Bu, işlemin tamamının atomik olarak yürütülmesini sağlar.
Kotlin
@Transaction
@Query("SELECT * FROM User")
fun getUsersAndLibraries(): List<UserAndLibrary>
Java
@Transaction
@Query("SELECT * FROM User")
public List<UserAndLibrary> getUsersAndLibraries();
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],null,["# Define and query one-to-one relationships\n\nA *one-to-one relationship* between two entities is a relationship where each\ninstance of the parent entity corresponds to exactly one instance of the child\nentity, and the reverse is also true.\n\nFor example, consider a music streaming app where the user has a library of\nsongs that they own. Each user has only one library, and each library\ncorresponds to exactly one user. Therefore, there is a one-to-one relationship\nbetween the `User` entity and the `Library` entity.\n\nFollow these steps to define and query one-to-one relationships in your\ndatabase:\n\n1. **[Define the relationship](#define)**: Create classes for both entities, ensuring one references the other's primary key.\n2. **[Query the entities](#query)**: Model the relationship in a new data class and create a method to retrieve the related data.\n\nDefine the relationship\n-----------------------\n\nTo define a one-to-one relationship, first create a class for each of your two\nentities. One of the entities must include a variable that is a reference to the\nprimary key of the other entity. \n\n### Kotlin\n\n @Entity\n data class User(\n @PrimaryKey val userId: Long,\n val name: String,\n val age: Int\n )\n\n @Entity\n data class Library(\n @PrimaryKey val libraryId: Long,\n val userOwnerId: Long\n )\n\n### Java\n\n @Entity\n public class User {\n @PrimaryKey public long userId;\n public String name;\n public int age;\n }\n\n @Entity\n public class Library {\n @PrimaryKey public long libraryId;\n public long userOwnerId;\n }\n\nQuery the entities\n------------------\n\nTo query the list of users and corresponding libraries, you must first model the\none-to-one relationship between the two entities.\n\nTo do this, create a new data class where each instance holds an instance of the\nparent entity and the corresponding instance of the child entity. Add the\n[`@Relation`](/reference/kotlin/androidx/room/Relation) annotation to the instance of the child entity, with\n[`parentColumn`](/reference/kotlin/androidx/room/Relation#parentcolumn()) set to the name of the primary key column of the parent\nentity and [`entityColumn`](/reference/kotlin/androidx/room/Relation#entitycolumn()) set to the name of the column of the child entity\nthat references the parent entity's primary key. \n\n### Kotlin\n\n data class UserAndLibrary(\n @Embedded val user: User,\n @Relation(\n parentColumn = \"userId\",\n entityColumn = \"userOwnerId\"\n )\n val library: Library\n )\n\n### Java\n\n public class UserAndLibrary {\n @Embedded public User user;\n @Relation(\n parentColumn = \"userId\",\n entityColumn = \"userOwnerId\"\n )\n public Library library;\n }\n\nFinally, add a method to the DAO class that returns all instances of the data\nclass that pairs the parent entity and the child entity. This method requires\nRoom to run two queries. You should therefore add the [`@Transaction`](/reference/kotlin/androidx/room/Transaction)\nannotation to this method. This ensures that the whole operation runs\natomically. \n\n### Kotlin\n\n @Transaction\n @Query(\"SELECT * FROM User\")\n fun getUsersAndLibraries(): List\u003cUserAndLibrary\u003e\n\n### Java\n\n @Transaction\n @Query(\"SELECT * FROM User\")\n public List\u003cUserAndLibrary\u003e getUsersAndLibraries();"]]