繁体   English   中英

RoomDB SQL 查询/数据建模问题

[英]RoomDB SQL Query / data modelling problem

我正在使用 RoomDB 在我的应用程序中存储实体,到目前为止,我只需要相对琐碎的查询,例如SELECT * FROM tableDELETE * 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张桌子; BarFooUnpopulated并且我想运行一个查询,它将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM