我正在尝试使用新的 Android Architecture Components 来更新我的 Android 知识。 。我正在研究如何使用 Room 保存数据,但如果你实际上有 relational data ,它似乎几乎无法使用我希望您能帮助我理解我错过的一些事情,或者确认 Room 确实不适用于任何类型的严肃关系数据。
这是我能提供的尽可能小的问题。
我有一个针对动物饲养员的应用程序,并且我有一个 Animal
实体。假设我有一个 Weight
记录动物在给定日期的体重的实体。安Animal
与 Weight
有一对多关系创建一段时间以来他们体重的历史记录。
根据 Room 培训文档,我需要创建一个名为 AnimalWithWeights
的第三类。像:
data class AnimalWithWeights(
@Embedded val Animal: Animal,
@Relation(
parentColumn = "AnimalId",
entityColumn = "AnimalId"
)
val Weights: List<Weight>
)
并向我的 DAO 添加一个函数,例如 fun getAnimalsWithWeights(): List<AnimalWithWeights>
.
@Transaction
@Query("SELECT * FROM Animal")
fun getAnimalsWithWeights(): List<AnimalWithWeights>
但我不仅仅拥有一种关系。
我的Animal
实体与其他实体有关系Animals
例如父亲、母亲、代孕母亲、繁殖伙伴以及与其他实体类型的关系,例如 Breed
, Breeder
, Buyer
, DNA
,以及 Weights
的多对多关系, Notes
, MedicalTreatments
, MatingRecords
, Ultrasounds
等
除非我遗漏了一些东西,否则听起来我需要创建一个类 AnimalWithWeights
然后将其包装在名为 AnimalWithWeightsAndNotes
的第四类中
并将其包装在名为 AnimalWithWeightsAndNotesAndMedicalTreatments
的第五类中
并将其包装在名为 AnimalWithWeightsAndNotesAndMedicalTreatmentsAndMatingRecords
的第六类中
并将其包装在名为 AnimalWithWeightsAndNotesAndMedicalTreatmentsAndMatingRecordsAndUltrasounds
的第七类中...
我什至还没有到达...AndFatherAndMotherAndSurrogateMotherAndBreedingParterAndBreedAndBreederAndBuyerAndDNA....
我目前正在使用ORMLite来处理我的 sqlite 持久性,它可以很好地处理关系数据,但似乎 Room 只是真正设计用于处理平面数据。
我是否遗漏了 Room 的某些内容?
我希望能够使用一些新功能,例如 LiveData<>
这样我就可以在数据更新时获得自动回调,这也是我研究 Room 的原因之一,但它似乎太初级,无法处理现实的关系数据模型。
最佳答案
从您的帖子中不清楚您是否知道在提到的辅助第三类中链接多个 @Relation
的可能性。从技术上讲,由于 Animal
与其他实体具有一对多和一对一的关系,因此您只需添加一个最终类 AnimalWithAllStuff
:
data class AnimalWithAllStuff(
@Embedded val Animal: Animal,
@Relation(
parentColumn = "AnimalId",
entityColumn = "AnimalId"
)
val weights: List<Weight>,
@Relation(
parentColumn = "AnimalId",
entityColumn = "AnimalId"
)
val notes: List<Notes>,
....
@Relation(
parentColumn = "fatherId",
entityColumn = "AnimalId"
)
val father: Animal,
@Relation(
parentColumn = "motherId",
entityColumn = "AnimalId"
)
val mother: Animal,
....
)
从技术上讲,每个@Relation
房间都会在内部调用单独的查询,如果您使用LiveData
房间设置跟踪器以通知观察者体重
的任何变化、注释
等等。
但我怀疑通过这种结构,您是否可以获得例如父亲
和母亲
的体重、笔记等。
关于android - 与 Android Room 有很多关系的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64356315/