【发布时间】:2020-08-12 18:39:54
【问题描述】:
假设我有这些表:
表格 - 用户
存储用户
@Entity(
tableName = "USER"
)
data class User(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "user_id")
val id: Int,
@ColumnInfo(name = "user_name")
val name: String
)
表格 - 项目
像产品一样存储物品
@Entity(
tableName = "ITEM"
)
data class Item(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "item_id")
val id: Int,
@ColumnInfo(name = "item_name")
val name: String,
@ColumnInfo(name = "item_description")
val description: String
)
表格 - 特殊
为产品 1 存储一个特产 特殊需要一个产品存在
@Entity(
tableName = "SPECIAL",
foreignKeys = [ForeignKey(
entity = Item::class,
parentColumns = ["item_id"],
childColumns = ["special_item_id"]
)]
)
data class Special(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "special_id")
val id: Int,
@ColumnInfo(name = "special_item_id")
val coupon_product_id: Int,
@ColumnInfo(name = "special_name")
val name: String,
@ColumnInfo(name = "special_description")
val description: String
)
表格 -- 收藏夹
存储用户最喜欢的特价商品
@Entity(
tableName = "TB_FAVOURITE",
foreignKeys = [ForeignKey(
entity = User::class,
parentColumns = ["user_id"],
childColumns = ["favourite_user_id"]
), ForeignKey(
entity = Special::class,
parentColumns = ["special_id"],
childColumns = ["favourite_special_id"]
)]
)
data class Favourite(
@PrimaryKey
@ColumnInfo(name = "favourite_user_id")
val id: Int,
@ColumnInfo(name = "favourite_special_id")
val specialId: Int
)
我的问题是,我如何进行查询以选择所有特价商品,然后创建一个类来存储用户是否喜欢它。目前它是一个用户应用程序,它是一个演示应用程序。因此,用户将始终相同,因此我可以硬编码 findById 并发送用户的 ID。
目标
是将查询的结果作为列表获取,其中包含:
- 所有特价商品
- 在 SomeClass 中应该包含 Special 里面的 Item
- 一个标志,知道它是否是该驱动程序的最爱
问题是我希望能够将房间数据库的结果映射到我想要的对象,所以我猜查询比映射器更重要,我知道如何做映射器。
请注意,我使用assets/database/mydb.db 文件来启动数据库我不知道这是否重要,所以我不知道在这里使用Embedded 和Relation 会如何工作
查询将如何做到这一点? db 的结构是否有任何改进以使其更容易?
【问题讨论】:
标签: java android kotlin android-room