[英]RoomDB SQL Query / data modelling problem
我正在使用 RoomDB 在我的应用程序中存储实体,到目前为止,我只需要相对琐碎的查询,例如SELECT * FROM table
和DELETE * FROM table
以及稍微更复杂的事情,例如连接 2 个表以返回复合模型,例如SELECT * from tableA INNER JOIN ON tableB tableA.tableBId = tableB.tableBId
。
到目前为止,一切都很好。 现在,我有一些我以前没有处理过的事情,我不确定我是否是 A)我的数据建模错误(因此无法查询来创建这些模型)或 B)我不知道零件完成这项工作所需的 SQL。
我远非 SQL 专家,但已经断断续续地使用了几年。
下面是我想要实现的模型的最简单示例(标有 @Entity 以便生成 RoomDB 表):
data class FooPopulated(
val fooId: Long,
@Embedded
val barOne: Bar,
@Embedded
val barTwo: Bar,
@Embedded
val barThree: Bar
)
@Entity(primaryKeys = ["fooId"])
data class FooUnpopulated(
val fooId: Long,
val barOneId: Long,
val barTwoId: Long,
val barThreeId: Long
)
@Entity(primaryKeys = ["barId"])
data class Bar(
val barId: Long,
val name: String
)
所以会有2张桌子; Bar
和FooUnpopulated
并且我想运行一个查询,它将FooUnpopulated
表条目与Bar
表条目“连接”起来,这样我就可以取回FooPopulated
的集合。
我被难住了,有人可以建议吗? 我的FooPopulated
model 是否只是“错误”,因为它没有定义可以由 SQL 查询满足的有效关系,或者,我错过了让这个发生的神奇关键字 Z9778840A0100CB30C982876741?
您可以使用一对一的关系,并且可以定义 FooPopulated 如下:
data class FooPopulated{
@Embeded
val fooUnpopulated: FooUnpopulated,
@Relation(parentColumn = "barOneId", childColumn = "barId")
val barOne: Bar,
@Relation( parentColumn = "barTwoId", childColumn = "barId")
val barTwo: Bar,
@Relation( parentColumn = "barThreeId", childColumn = "barId")
val barThree: Bar
}
现在你可以在你的 DAO 中定义一个 function 来得到这个 object:
@Transaction
@Query("YOUR QUERY HERE")
fun getFooPopulated(): List<FooPopulated>
更多详细信息: https://developer.android.com/training/data-storage/room/relationships#one-to-one
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.