Android Room 一对多关系查询反向

Aza*_*tys 8 android foreign-keys kotlin android-room

我有两个对象之间的一对多关系。我有,可以说,usermany pets

使用这个我可以检索我的对象

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

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

用户道:

@Transaction @Query("SELECT * FROM users")
fun getUserWithPets() : LiveData<List<UserWithPets>>
Run Code Online (Sandbox Code Playgroud)

这工作正常。现在我想获得与每个用户相关联的 Pet 列表......那将是PetWithUser.

所以我做了:

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

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

宠物道:

@Transaction @Query("SELECT * FROM pets")
fun getPetsWithUser(): LiveData<List<PetWithUser>>
Run Code Online (Sandbox Code Playgroud)

一旦我将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
Run Code Online (Sandbox Code Playgroud)

Rea*_*nkm 0

您可能很早就发现了这一点,但看起来您唯一的问题是您在 Relation 行上放置了 Pet 类而不是 User 类:

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

代替

@Relation(parentColumn = "user_id", entityColumn = "id", entity = User::class)
        var user: User? = null
Run Code Online (Sandbox Code Playgroud)