【问题标题】:Android Room obtain reference to parent in one-to-many relationshipAndroid Room 以一对多的关系获取对父级的引用
【发布时间】:2021-02-08 13:16:36
【问题描述】:

在我的应用程序中,我有两个表,它们之间存在一对多关系。电影和类型,每部电影都有一种类型。在显示电影列表的扩展 ArrayAdapter 中,我希望根据流派为电影设置不同的颜色,这是在流派类中定义的。如果我参考了电影中的流派,这将很容易做到,所以我可以做到movie.getGenre().getColor()。但是 Room 禁止这样做,我不想根据电影列表中每个条目的 id 来搜索类型。

本质上,在使用 Android Room 时,如何快速有效地从子类获取对父类的引用。关系让我可以轻松地查询一个流派及其所有电影,但反之则不行。我想最终得到一个电影列表和流派列表,并且我希望每部电影都包含对其所属流派的引用。

我很惊讶没有在谷歌上看到这个问题。这个问题一般是怎么解决的?

【问题讨论】:

  • 您能否为moviegenre 显示您的@Entity? RoomDB 有一个 @Embbded 用于一对多关系

标签: android android-room


【解决方案1】:

为了得到电影和对应流派的列表,我们应该对两个实体之间的一对一关系进行建模。

  1. 为两个实体创建一个类:

     data class MovieAndGenre(
         @Embedded val movie: Movie,
         @Relation(
              parentColumn = "genre_id",  // as named in Movie table             
              entityColumn = "_id"  // as named Genre table
         )
         val genre: Genre
     )
    
  2. 在 Dao 中添加一个方法来获取父子对的所有实例

    @Transaction
    @Query("SELECT * FROM movie")
    fun getMoviesAndGenres(): List<MovieAndGenre>
    

注意:实施可能会根据您的实体的结构方式而有所不同。但是你会知道如何实现你想要的。

如果您想了解更多关于房间关系的信息,请查看here

【讨论】:

  • 谢谢,我会尝试实现这一点,这对我来说违反直觉,因为在我的脑海中这是一对多的关系,因为一个类型有很多电影
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多