【问题标题】:Android Room One to many relation query reverseAndroid Room 一对多关系查询反向
【发布时间】:2018-08-24 14:23:19
【问题描述】:

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

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

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

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

用户道:

@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
)

宠物道:

@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

【问题讨论】:

  • 你能从错误中得到一些信息吗?你能发布一些错误日志吗
  • 我有一个疑问。一个用户可以拥有许多宠物。同样,一个 Pet 可以属于多个用户吗?例如,一条狗(比如 A)可以属于多个用户(user1,user2)吗?
  • 很抱歉,如果不清楚。一个用户可以拥有许多宠物(是的!)。一个宠物只能有 1 个用户。我想获取 db 中所有 Pets 及其关联用户的列表。

标签: android kotlin foreign-keys android-room


【解决方案1】:

正确的版本是:

data class PetWithUser (
    @Embedded
    var pet: Pet,

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

在哪里

  • owner_id 是在Pet 类中定义的User 的id
  • user_idUser 类中定义的用户 ID 匹配

【讨论】:

    【解决方案2】:

    您可能早就想通了,但看起来您唯一的问题是您将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-18
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2020-07-27
      相关资源
      最近更新 更多