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



我有一个持久的实体Cats (id, name)。我想查询所有的猫(使用HQL/JPQL),猫命名为"Tom"是在顶部,即顺序自定义表达式name="Tom"。

在Oracle中我可以使用

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

如何在Hibernate中做?

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

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

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

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

2)创建一个视图,并创建映射到该视图的实体Cat的子类。

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

相关内容

最新更新