Hubungan one-to-one antara dua entity adalah hubungan saat setiap instance parent entity berkaitan dengan tepat satu instance entity turunan, dan hal sebaliknya juga berlaku.
Misalnya, pertimbangkan aplikasi streaming musik tempat pengguna memiliki library
lagu yang mereka miliki. Setiap pengguna hanya memiliki satu library, dan setiap library
berkaitan dengan tepat satu pengguna. Oleh karena itu, ada hubungan
one-to-one antara entity User
dan entity Library
.
Ikuti langkah-langkah berikut untuk menentukan dan membuat kueri hubungan satu-ke-satu di database Anda:
- Menentukan hubungan: Buat class untuk kedua entity, yang memastikan salah satunya mereferensikan kunci utama entity lainnya.
- Buat kueri entity: Buat model hubungan dalam class data baru dan buat metode untuk mengambil data terkait.
Menentukan hubungan
Untuk menentukan hubungan one-to-one, pertama-tama buat class untuk kedua entitas Anda. Salah satu entity harus menyertakan variabel yang merupakan referensi ke kunci utama entity lainnya.
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;
}
Membuat kueri entitas
Untuk membuat kueri daftar pengguna dan library terkait, Anda harus terlebih dahulu membuat model hubungan one-to-one antara dua entity.
Untuk melakukannya, buat class data baru tempat setiap instance menyimpan instance
parent entity dan instance entity turunan yang sesuai. Tambahkan
anotasi @Relation
ke instance entity turunan, dengan
parentColumn
ditetapkan ke nama kolom kunci utama dari entity
induk dan entityColumn
ditetapkan ke nama kolom entity turunan
yang mereferensikan kunci utama entity induk.
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;
}
Terakhir, tambahkan metode ke class DAO yang menampilkan semua instance class
data yang menghubungkan parent entity dan entity turunan. Metode ini memerlukan
Room untuk menjalankan dua kueri. Oleh karena itu, Anda harus menambahkan anotasi @Transaction
ke metode ini. Hal ini memastikan bahwa seluruh operasi berjalan
secara atomik.
Kotlin
@Transaction
@Query("SELECT * FROM User")
fun getUsersAndLibraries(): List<UserAndLibrary>
Java
@Transaction
@Query("SELECT * FROM User")
public List<UserAndLibrary> getUsersAndLibraries();