使用@Relation 从房间数据库中一次选择 3 个实体

问题描述

我的应用程序中有一个数据库,它有 3 个表服务器、站点、组

@Entity(tableName = "servers")
data class Server(

    @ColumnInfo(name = "server_id")
    var serverId: Long,@ColumnInfo(name = "account_id")
    var accountId: Int,@ColumnInfo(name = "device_id")
    var deviceId: Int,@ColumnInfo(name = "company_id")
    var companyId: Int
   
    .......


@Entity(tableName = "sites")
data class Site(

    @ColumnInfo(name = "server_id")
    var serverId: Long,@ColumnInfo(name = "site_id")
    val siteId: Int,@ColumnInfo(name = "description",defaultValue = "")
    val description: String

)



@Entity(tableName = "groups")
data class Group(

    @ColumnInfo(name = "server_id")
    val serverId: Long,@ColumnInfo(name = "group_id")
    var groupId: Int,defaultValue = "")
    val description: String

    ......

所以我们可以看到,对于每台服务器,我们都有站点,并且每个站点都有几个组。 现在我制作了一个名为 ServerSiteWithGroup 的 POJO,其中包含一个 Server 和另一个 POJO SiteWithGroup

data class ServerSiteWithGroup(
    @Embedded
    val server: Server,@Relation(parentColumn = "server_id",entityColumn = "server_id")
    val siteWithGroup: SiteWithGroup
)


data class SiteWithGroup(
    @Embedded
    val group: Group,@Relation(parentColumn = "site_id",entityColumn = "site_id")
    val site: Site
)

因此,鉴于我想对 Room 数据库进行一次查询并获取给定 serverId,siteId,groupId 的服务器、站点、组对象

我试过了,但没有用

    @Transaction
    @Query("Select * from groups 
        inner join servers on groups.server_id = servers.server_id 
        where groups.server_id = :serverId 
        and groups.site_id = :siteId 
        and groups.group_id = :groupId")
    fun getSiteWithGroup(serverId: Long,siteId: Int,groupId: Int): LiveData<ServerSiteWithGroup>

我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)