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

如何在Hibernate/HQL/JPQL中按客户表达式排序结果,hibernate,sql-order-by,hql,jpql,Hibernate,Sql Order By,Hql,Jpql,我有持久实体猫(id,名称)。我想查询所有名为“Tom”的猫位于顶部的猫(使用HQL/JPQL),即按自定义表达式name='Tom'排序 在Oracle中,我可以使用 ORDER BY CASE name WHEN 'Tom' THEN 0 ELSE 1 END. 如何在Hibernate中执行?在普通JPQL/HQL中不可能执行相同的查询,但有两种方法可以获得相同的结果 1) 编写本机查询并将其映射到实体Cat 2) 创建一个视图,并将实体Cat子类化以映射到该视图 我很清楚,没有一个解决

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

在Oracle中,我可以使用

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

如何在Hibernate中执行?

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

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

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


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

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

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

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


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

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

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

我刚刚编写了一个测试类,并在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配合使用效果良好。我甚至可以添加额外的
orderby
列。与Hibernate 4.0.4和PostgreSQL配合使用效果很好。我甚至可以添加额外的
orderby
列。