Room không hỗ trợ điều này trực tiếp do một số các vấn đề tiềm ẩn với tải chậm , nhưng với một số thủ thuật DAO thì điều đó có thể xảy ra. Bạn sẽ cần xử lý các phần chèn một cách rõ ràng và để truy vấn mọi thứ ngay lập tức, bạn sẽ cần một POJO để kết thúc tất cả.
@Entity(foreignKeys = {
@ForeignKey(
entity = PersonEntity.class,
parentColumns = "personId",
childColumns = "personIdFk",
onDelete = CASCADE
)
})
public class Pet {
@PrimaryKey
private String petId;
private String name;
private String personIdFk;
}
@Entity(tableName = "person")
public class PersonEntity {
@PrimaryKey
private String personId;
}
public class Person {
@Embedded
private PersonEntity personEntity;
@Relation(parentColumn = "personId", entityColumn = "personIdFk")
private List<Pet> pets;
}
@Dao
public abstract class PersonDao {
@Insert
protected abstract void insert(PersonEntity personEntity);
@Insert
protected abstract void insert(List<Pet> pets);
@Transaction
public void insert(Person person) {
insert(person.getEntity());
insert(person.getPets());
}
@Query("SELECT * FROM person")
public abstract List<Person> getAll();
}
@Database(entities = {PersonEntity.class, Pet.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract PersonDao personDao();
}
Bộ tạo, bộ lấy và bộ định tuyến được bỏ qua cho ngắn gọn.