【问题标题】:How to order results by customer expression in Hibernate/HQL/JPQL如何在 Hibernate/HQL/JPQL 中按客户表达对结果进行排序
【发布时间】:2011-10-28 14:35:30
【问题描述】:

我有永久实体 Cats(id、name)。我想查询名为“Tom”的猫在顶部的所有猫(使用 HQL/JPQL),即按自定义表达式 name='Tom' 排序。

在 Oracle 中,我可以使用

ORDER BY CASE name WHEN 'Tom' THEN 0 ELSE 1 END.

在Hibernate中怎么办?

【问题讨论】:

    标签: hibernate sql-order-by hql jpql


    【解决方案1】:

    在普通的 JPQL/HQL 中不可能进行相同的查询,但是有两种方法可以得到相同的结果

    1) 编写原生查询并将其映射到实体 Cat。

    2) 创建一个视图并将实体 Cat 子类化以映射到该视图。

    我很清楚没有一个解决方案是理想的,但是除了本机查询之外,Hibernate 和 JPA 都没有针对这种情况的功能。我认为这三个解决方案中哪一个最好由您决定,因为这会影响您的集成测试。

    【讨论】:

      【解决方案2】:

      我刚刚编写了一个测试类,以下在 Hibernate/JPA 3.6.1 中工作:

      SELECT o 
        FROM Cat o 
       ORDER BY CASE o.name WHEN 'Tom' THEN 0 ELSE 1 END
      

      【讨论】:

      • 适用于 Hibernate 4.0.4 和 PostgreSQL。我什至可以添加额外的order by 列。
      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 2013-09-18
      • 1970-01-01
      • 2017-10-27
      • 2021-11-12
      • 2014-03-30
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多