我想使用ORMLite从我的数据库中查询项目列表。排序必须是一个位字段,然后是字段的可空性,然后是日期字段。这就是我现在所拥有的:
QueryBuilder<Task, Integer> queryBuilder = mTaskDao.queryBuilder();
queryBuilder
.orderBy("done", true)
.orderByRaw("visit_id is null desc")
.orderBy("duedate", true);
但是,当我在上述查询中调用getStatement()
时,它会返回以下SQL:
SELECT * FROM `task` ORDER BY visit_id is null
请注意,orderByRaw只对QueryBuilder产生了影响。如果orderByRaw为非null,则读取QueryBuilder code我看到的方法appendOrderBys
会忽略非RawOrderBy语句。
理想情况下,它应该以正确的顺序生成orderBy和orderByRaw。
我现在只能想到的解决方法是在orderByRaw()
方法中按子句设置我的所有订单。
答案 0 :(得分:1)
请注意,orderByRaw只对QueryBuilder产生了影响。阅读QueryBuilder代码我看到方法appendOrderBys忽略非RawOrderBy语句,如果orderByRaw非null。
呀。这看起来是ORMLite的限制。它似乎要么处理原始的或非原始的。请参阅此处的代码,如757。
这完全没有记录它们是相互排斥的,我看不出它们应该是什么原因。我添加了这个错误:
已修复它的主干并于2013年12月16日在版本4.48中发布。
https://github.com/j256/ormlite-core/commit/36492cebc1506b0b75f3a6f72569ec25de776aec