如何在Hibernate / HQL / JPQL中按客户表达式排序结果

时间:2011-08-17 04:15:32

标签: hibernate sql-order-by hql jpql

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

在Oracle中,我可以使用

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

如何在Hibernate中做什么?

2 个答案:

答案 0 :(得分:6)

我刚刚编写了一个测试类,以下内容适用于Hibernate / JPA 3.6.1:

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

答案 1 :(得分:0)

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

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

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

我非常清楚,没有一种解决方案是理想的,但除了本机查询之外,Hibernate和JPA都没有针对此场景的功能。我认为您应该考虑这三种解决方案中最好的解决方案,因为这会影响您的集成测试。