【问题标题】:Android Room getting count of elements in an 'incoming foreign key list' in an 'embedded entity'?Android Room 在“嵌入式​​实体”中获取“传入外键列表”中的元素计数?
【发布时间】:2021-02-03 12:03:02
【问题描述】:

我有 2 个实体,GradeStudentStudent 有一个通向教室的外键。嵌入式实体ClassRoom 长这样,

data class ClassRoom(

    @Embedded
    val level: ClassLevel

    @Relation(
        parentColumn = "id",
        entityColumn = "ClassLevel"
    )
    val students: List<Student>,

    // val strength: Int ?

) 

我想要实现的是,使用ClassRoomInstance.strength 来获取传入外键的计数。比用students.size计算学生的大小

实现这一点的方法是什么?

谢谢

【问题讨论】:

  • 您能否在此上下文中添加所有Entity 类文件。另外添加Dao 会有所帮助。谢谢!

标签: java android kotlin android-room android-room-relation


【解决方案1】:

您可以创建一个返回学生人数的查询。

考虑以下 POJO、电影和预告片

@Entity
data class Movie(
    @PrimaryKey
    val id: Int,
    val title: String,
    val overview: String
)
@Entity
data class Trailer(
    @PrimaryKey
    val id: Int,
    val movieId: Int,
    val trailerPath: String
)

想象一下,我想获得带有预告片数量的电影

data class MoviesWithTrailerCount(
    @Embedded
    val movie: Movie,
    val trailerCount: Int
)

在 MovieDAO 中,我可以创建一个查询:

@Transaction
@Query("SELECT M.*, COUNT(T.id) AS trailerCount FROM Movie M INNER JOIN Trailer T ON T.movieId = M.id WHERE M.id = :id")
abstract suspend fun moviesAndTrailersCount(id: Int): MoviesWithTrailerCount

所以,基本上你想要实现的目标可以使用 SQL 查询和@Embedded

【讨论】:

  • 谢谢,如果我想要一个包含预告片数量的所有电影的列表怎么办?
  • 您可以将 moviesAndTrailersCount 的返回类型更改为 List 或 Flow 并删除 where 原因
【解决方案2】:

尝试将此查询添加到您的 Dao,请参阅 google 示例:

@Query("SELECT COUNT(column) FROM table")
int getDataCount();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多