【问题标题】:Hibernate how to use order by clause for sort by sum of fieldHibernate如何使用order by子句按字段总和排序
【发布时间】:2013-11-13 13:22:55
【问题描述】:

如何使用 order by 子句按字段总和排序

实体:

    class MyClass {

        private int a;
        private int b;

        //...

    }

HQL 工作正常:

"SELECT myclass FROM MyClass myclass ORDER BY myclass.a + myclass.b DESC "

如何使用 Criteria API 做同样的事情?

【问题讨论】:

  • AFAIK,没有破解你自己的 Order 子类的方法是不可能的,它会覆盖 toSqlString()。为什么不将其保留为 HQL 查询?
  • 是真的吗?我的 HQL 有效。 “Hibernate 不支持 order by 子句中的算术表达式。” stackoverflow.com/a/2373359/1319419
  • 嗯,自 2010 年以来情况可能发生了变化,因为您的 HQL 查询工作正常。
  • 在这种情况下使用@Formula 怎么样?
  • Criteria API 比 HQL 限制更多,并导致代码更长、更难阅读。当必须创建动态查询时(例如具有多个可选条件的搜索表单),它很有用。除此之外,HQL 更容易、更易于维护和更强大。使用它。

标签: hibernate orm hql criteria criteria-api


【解决方案1】:

正如你所说,你可以使用@Formula

@Column(name="column_a")
private Integer a;
@Column(name="column_b")
private Integer b;
@Formula("(column_a+column_b)")
private Integer c;

之后可以按c的属性排序

criteria.addOrder(Order.asc("c"));

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 2011-09-13
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多