【问题标题】:Room querying one to many relationship房间查询一对多关系
【发布时间】:2018-03-27 13:33:07
【问题描述】:

我们如何查询所有实体及其与 Room 的一对多关系?

假设我们有一个用户实体

@Entity
class User(@PrimaryKey(autoGenerate = true) var id: Long?, var name: String)

还有一个宠物实体

@Entity(foreignKeys = [(ForeignKey(entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE))])
public class Pet(@PrimaryKey(autoGenerate = true),
    var name: String,
    var userId: Long?,
    @Ignore var user: User?)

通常我们会这样查询所有宠物:

@Dao
interface PetsDao {
    @Query("SELECT * FROM pets")
    fun getAll(): Flowable<List<Pet>>
}

但是我们怎样才能让 User 自动附加到 Pet 对象上呢?就像查询是:

@Dao
interface PetsDao {
    @Query("SELECT * FROM pets p JOIN users u ON u.id = p.userId")
    fun getAllWithUser(): Flowable<List<Pet>>
}

然后我们可以使用 pet.user.name 而无需单独查询用户。

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    【讨论】:

    • @Embedded 可以很好地获取用户中的宠物列表,我真的不知道如何从宠物本身获取用户(其他方式)。你愿意举一个这个用例的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多