android sql添加多个相同id,Android Room数据库:如何嵌入多个实体

我正在为我的新项目使用空间,但是我在如何干净地访问一对一值方面感到挣扎。

我有地址,所有者和站点的实体,所有者和站点都有关联的地址,并且每个站点都有一个所有者

是可以干净地访问这些,例如site.owner.address.l1?

我调查了@Relation它返回的列表是否不理想

实体

@Entity(tableName="addresses")

data class Address(

@PrimaryKey

@ColumnInfo(name="address_id")

val id: Int,

@ColumnInfo(name="address_l1")

val l1: String

)

@Entity(tablename="owners")

data class Owner(

@PrimaryKey

@ColumnInfo(name="owner_id")

val id: Int,

@ColumnInfo(name="owner_name")

val name: String

)

@Entity(tableName="sites")

data class Site(

@PrimaryKey

@ColumnInfo(name="site_id")

val id: Int,

@ColumnInfo(name="site_addressid")

val addressid: Int

@ColumnInfo(name="site_ownerid")

val ownerid: Int

)

道氏

@Query("SELECT * FROM sites")

fun getSites(): List

@Query("SELECT * FROM owners")

fun getOwners(): List

@Query("SELECT * FROM addresses")

fun getAddresses(): List

@Query("SELECT * FROM sites JOIN address ON sites.site_addressid = address.address_id JOIN owners ON sites.site_ownerid = owners.owner_id JOIN address ON owners.owner_addressid = address.address_id WHERE sites.site_id = :siteid")

fun getSiteByIdWithDetails(siteid): Site

我只能看到多个POJO的方法来使这项工作

无效,但大致正确

data class OwnerAddress(

@Embedded

val owner: Owner,

@Embedded

val address: Address

)

data class SiteAddress(

@Embedded

val site: Site,

@Embedded

val owner: OwnerAddress,

@Embedded

val address: Address

}

并通过使用它

@Query("SELECT * FROM sites JOIN address ON sites.site_addressid = address.address_id JOIN owners ON sites.site_ownerid = owners.owner_id JOIN address ON owners.owner_addressid = address.address_id WHERE sites.site_id = :siteid")

fun getSiteByIdWithDetails(siteid): SiteAddress

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值