GreenDao和ORM通常使我们在开发时间和可维护性方面获得了大量使用原始查询。
但我觉得我在运行的情况下,ORM,特别是GreenDao,与执行原始查询相比有限:
让A和B成为两个实体; A和B有一对多的关系; A是" one"这边和B很多"很多"侧。 我需要检索A个实体的列表,并为每个实体获取符合特定条件的链接B实体的数量。
一个真实世界的例子是一个消息传递应用程序,它显示包含多个消息的线程列表;在每个线程旁边显示未读消息的数量(如果没有条件,则为总消息)。
使用原始SQL很容易;我会使用COUNT
语句来获取聚合列。缺点是需要手动解析结果并构建实体列表;并且我们使用GreenDao提供的LazyList
失去了延迟加载的好处。
另一个解决方案是在A实体上调用queryRawCreate()
;问题是生成的A实体需要有一个不直接链接到数据库列的成员变量,并让GreenDao将聚合列映射到该成员变量。我想知道当前版本是否支持此功能。
我应该使用完整的原始SQL解决方案,还是可以利用GreenDao(甚至部分)自动返回包含聚合列的实体列表?