我在两个对象之间存在一对多关系。
可以说,我有一个user,它具有many pets

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

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

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

UserDao:
@Transaction @Query("SELECT * FROM users")
fun getUserWithPets() : LiveData<List<UserWithPets>>

这工作正常。
现在,我想获取与每个用户关联的Pet列表...可能是PetWithUser

所以我做了:
data class PetWithUser (
        @Embedded
        var pet: Pet? = null,

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

PetDao:
@Transaction @Query("SELECT * FROM pets")
fun getPetsWithUser(): LiveData<List<PetWithUser>>

一旦将getPetsWithUser添加到代码中,我就会在生成DataBinding类时遇到错误。

如何建立一对多关系并获得petuser

编辑:

错误日志:它们是从DataBinding java文件生成的。第二个(HomeFragmentDataBinding)不使用PetWithUser,但是在将PetWithUser添加到代码中时引发错误。
error: cannot find symbol
  protected ListItemBinding(DataBindingComponent _bindingComponent, View _root,
                                   ^
  symbol:   class DataBindingComponent
  location: class ListItemBinding

error: cannot find symbol
      @Nullable ViewGroup root, boolean attachToRoot, @Nullable DataBindingComponent component) {
                                                                ^
  symbol:   class DataBindingComponent
  location: class FragmentHomeBinding

最佳答案

正确的版本是:

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匹配

    关于Android Room一对多关系查询反向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52006548/

    10-10 22:33