首页 > 解决方案 > Room:带有子查询的查询。如何对数据类建模?

问题描述

我想对房间数据库执行查询,结果是一个记录列表,这些记录由几个表中的列组成。首先我有一个子查询,然后与另一个表连接。在结果中,我只选择了几列。在此查询中,我使用 3 个表。

当我编译项目时,我收到错误消息:

无法弄清楚如何从游标中读取此字段。私人 org.joda.time.DateTime createdDate; .

错误指向此 DateTime 字段。

这是我的界面:

@Dao
interface SomeObjectDao {
  @Query (
    SELECT a.Id, a.number, b.CreatedDate as createdDate
    FROM (SELECT p.*, q.*
          FROM tableP AS p, tableQ AS q
          WHERE p.userId = q.userId) AS a, table2 AS b
    WHERE a.Id = b.someId AND a.position = b.position)
  fun getSummary(): List<SomeObjectSummaryDB>
}

我的 SomeObjectSummaryDB 自定义类如下所示:

class SomeObjectSummaryDB(
  var Id: String,
  var number: Int,

  @TypeConverters(DateTimeConverter::class)
  var createdDate: DateTime
)

我已经看到了一些使用 @Embedded 和 @ForeignKey 注释的示例。这是我在这种情况下需要的东西吗?如果是这样,任何人都可以帮助我获取我的对象列表需要什么?

我需要为子查询和整体结果创建模型吗?如果是这样,这些模型会是什么样子?

任何帮助是极大的赞赏!

标签: kotlinsubqueryandroid-roomdata-class

解决方案


解决了问题;这里的问题是我用构造函数创建了这个类,但我需要的是一个有属性的类。像这样:

class SomeObjectSummaryDB {
  var id: String = ""
  var number: Int = 0
  @TypeConverters(DateTimeConverter::class)
  var createdDate: DateTime = DateTime()
}

并不是说这里不需要 @Entity 注释。


推荐阅读