ORMLite混合orderBy()和orderByRaw()

时间:2013-12-09 11:02:16

标签: java android ormlite

我想使用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()方法中按子句设置我的所有订单。

1 个答案:

答案 0 :(得分:1)

  

请注意,orderByRaw只对QueryBuilder产生了影响。阅读QueryBuilder代码我看到方法appendOrderBys忽略非RawOrderBy语句,如果orderByRaw非null。

呀。这看起来是ORMLite的限制。它似乎要么处理原始的或非原始的。请参阅此处的代码,如757。

  

https://github.com/j256/ormlite-core/blob/e11db21da474e9e0d4004cd83fa9f71c3d4e66e3/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java#L757

这完全没有记录它们是相互排斥的,我看不出它们应该是什么原因。我添加了这个错误:

  

https://sourceforge.net/p/ormlite/bugs/161/

已修复它的主干并于2013年12月16日在版本4.48中发布。

  

https://github.com/j256/ormlite-core/commit/36492cebc1506b0b75f3a6f72569ec25de776aec