【问题标题】:ORMLite mixing orderBy() and orderByRaw()ORMLite 混合 orderBy() 和 orderByRaw()
【发布时间】: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 * FROM task` ORDER BY visit_id is null desc,done,dueDate` 请注意 orderByRaw 是第一个,但我的意图是将其设置为第二个子句。
  • 叹息。是的,不幸的是,我昨天很晚才发现这一点。愚蠢的。我已经在后备箱中解决了这个问题。你能从代码中工作还是我应该发布另一个版本?
  • 我的解决方法是将所有 orderbys 称为一个 orderbyraw。不需要快速修复。

标签: java android ormlite


【解决方案1】:

注意只有 orderByRaw 对 QueryBuilder 有影响。阅读 QueryBuilder 代码,我看到方法 appendOrderBys 会忽略非 RawOrderBy 语句,如果 orderByRaw 不为空。

是的。这看起来是 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

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 2013-10-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多