Mari kita lihat bagaimana @Relation bekerja. Ada dua tahap:
- Ruangan mengeksekusi kueri yang Anda masukkan ke
@Queryuntuk mendapatkan pengguna. Seperti biasa, kueri itu tidak menyertakan Gabung apa pun. Kueri ini digunakan untuk mendapatkan bagian data yang ada di tabel utama (Userdalam kasus Anda). - Ruangan menjalankan satu kueri lagi. Untuk itu tampilannya di
@Relationparameter dan memahami tabel apa yang harus ditanyakan selanjutnya (Recorddalam 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 padaRecordbidang, misalnya. Mendapatkan hasil Room mengubahnya dalam format yang dibutuhkan (mengisi DaftarRecords).
Anda memiliki pilihan:
- Untuk membalikkan hubungan untuk menyetel filter pada
Recordstabel (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
@Relationsama 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).