如何在Hibernate/HQL/JPQL中按客户表达式排序结果
我有持久实体猫(id,名称)。我想查询所有名为“Tom”的猫位于顶部的猫(使用HQL/JPQL),即按自定义表达式name='Tom'排序 在Oracle中,我可以使用如何在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子类化以映射到该视图 我很清楚,没有一个解决
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
列。