我的项目中具有继承和经典关系的复杂实体关系。我正在寻找一种优雅的方式来加载自动包含相关数据的数据,以下示例情况应解释该问题。
@Entity
,Cat
,Dog
和PetHolder
创建经典的Holder
类。效果很好。@Dao
类,该类处理加载和保存实体的数据。因此,我创建了CatDao
,DogDao
,PetHolderDao
和HolderDao
。在每个@Dao
类中,我忽略依赖于另一个实体的字段:listHoldPets
中的Holder
,pet
和{中的holder
和PetHolder
petHolder
中的{1}}。
现在例如装载所有仅包含名称的持有人非常容易,而且空间还可以。保存每个对象也可以正常工作。Pet
类和一个HolderWithPetHolder
。使用HolderWithPetHolderDao
批注,我可以将@Relation
的所有petHolders
自动加载到holder
对象中。但是列表中的所有HolderWithPetHolder
对象都不会包含petHolder
对象。如果您有任何代码示例,链接或只是有关此的想法,请告诉我。谢谢!
链接:
答案 0 :(得分:0)
有可能!
您的数据库设计并未从您的ERD中100%清除,因此我对列和表名采取了一些自由,但希望这是有道理的:
public class PetHolderWithPet {
@Embedded
private PetHolder;
@Relation(parentColumn = "petId", entityColumn = "id", entity = Pet.class)
private Pet;
// add getters and setters
}
public class HolderWithPetHolderWithPet {
@Embedded
private HoldereventSession;
@Relation(parentColumn = "id", entityColumn = "holderId", entity = PetHolder.class)
private List<PetHolderWithPet> pets;
// add getters and setters
}
@Dao
public interface PetDao {
@Query("select * from holder where id = :id")
@Transaction
HolderWithPetHolderWithPet loadItAll(long id);
}
查看此文章: https://medium.com/@jaclync/android-room-with-nested-relationships-803dad19a500