Mari kita lihat bagaimana @Relation
bekerja. Ada dua tahap:
- Ruangan mengeksekusi kueri yang Anda masukkan ke
@Query
untuk mendapatkan pengguna. Seperti biasa, kueri itu tidak menyertakan Gabung apa pun. Kueri ini digunakan untuk mendapatkan bagian data yang ada di tabel utama (User
dalam kasus Anda). - Ruangan menjalankan satu kueri lagi. Untuk itu tampilannya di
@Relation
parameter dan memahami tabel apa yang harus ditanyakan selanjutnya (Record
dalam kasus Anda) dan apa yang seharusnya menjadi kondisi gabungan dengan hasil pengguna. Penting bagi Anda untuk tidak mengganggu proses pembuatan kueri ini. Anda tidak dapat mengatur filter padaRecord
bidang, misalnya. Mendapatkan hasil Room mengubahnya dalam format yang dibutuhkan (mengisi DaftarRecords
).
Anda memiliki pilihan:
- Untuk membalikkan hubungan untuk menyetel filter pada
Records
tabel (tetapi dengan itu Anda akan mendapatkan data datar tanpa Daftar).
public class UserWithRecords {
@Embedded
protected Record record;
@Relation(
parentColumn = "user_id",
entity = User.class,
entityColumn = "id"
)
protected User user;
}
dan untuk mengubah kueri menjadi:
@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
- Tidak menggunakan
@Relation
sama sekali, tulis query dengan Joins seperti yang sudah Anda coba. Tetapi kemudian Anda harus mengubah hasil secara manual ke bentuk yang diperlukan dalam kode (hasil perulangan dan membentuk Daftar).