【发布时间】: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
我有永久实体 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
在普通的 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
【讨论】:
order by 列。