【发布时间】:2013-12-09 11:02:15
【问题描述】:
我想使用 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 有影响。阅读 QueryBuilder code 我看到方法 appendOrderBys 会忽略非 RawOrderBy 语句,如果 orderByRaw 不为空。
理想情况下,它应该以正确的顺序生成 orderBy 和 orderByRaw。
目前我能想到的唯一解决方法是在 orderByRaw() 方法中设置我的所有 order by 子句。
【问题讨论】:
-
这已在 4.48 中修复。让我知道它现在是否适合您。
-
感谢@Gray 的快速回归。不幸的是,在混合正常和原始时,orderBy 子句的顺序不正确。我的原始查询在 4.48 版中的查询看起来像这样
SELECT * FROMtask` ORDER BY visit_id is null desc,done,dueDate` 请注意 orderByRaw 是第一个,但我的意图是将其设置为第二个子句。 -
叹息。是的,不幸的是,我昨天很晚才发现这一点。愚蠢的。我已经在后备箱中解决了这个问题。你能从代码中工作还是我应该发布另一个版本?
-
我的解决方法是将所有 orderbys 称为一个 orderbyraw。不需要快速修复。