Android Room一对多关系查询反向

时间:2018-08-24 14:23:20

标签: android kotlin foreign-keys android-room

我在两个对象之间有一对多关系。 假设我有一个user many的{​​{1}}。

使用它我可以检索我的对象

pets

UserDao:

data class UserWithPets (
        @Embedded
        var user: User? = null,

        @Relation(parentColumn = "id", entityColumn = "user_id", entity = Pet::class)
        var pets: List<Pet>? = null
)

这正常工作。 现在,我想获取与每个用户相关联的Pet列表...应该是@Transaction @Query("SELECT * FROM users") fun getUserWithPets() : LiveData<List<UserWithPets>>

我做到了:

PetWithUser

宠物岛:

data class PetWithUser (
        @Embedded
        var pet: Pet? = null,

        @Relation(parentColumn = "user_id", entityColumn = "id", entity = Pet::class)
        var user: User? = null
)

@Transaction @Query("SELECT * FROM pets") fun getPetsWithUser(): LiveData<List<PetWithUser>> 添加到代码中后,就会出现DataBinding类生成错误。

我如何建立一对多关系并与getPetsWithUser一起获得pet

编辑:

错误日志:它们是从DataBinding java文件生成的。第二个(HomeFragmentDataBinding)不使用user,但是在将PetWithUser添加到代码中时引发错误。

PetWithUser

2 个答案:

答案 0 :(得分:1)

正确的版本为:

data class PetWithUser (
    @Embedded
    var pet: Pet,

    @Relation(parentColumn = "owner_id", entityColumn = "user_id")
    var user: User? = null
)

其中

  • owner_id User类中定义的Pet的ID
  • user_id User类中定义的用户ID匹配

答案 1 :(得分:0)

您可能早就知道了这一点,但是看来您唯一的问题是您将Pet类放到了Relation行而不是User类上

@Relation(parentColumn = "user_id", entityColumn = "id", entity = Pet::class)
        var user: User? = null

代替

@Relation(parentColumn = "user_id", entityColumn = "id", entity = User::class)
        var user: User? = null