是否可以在 Hibernate @OrderBy 注释中使用 CASE WHEN ... END
甚至原生 SQL?怎么办?
例如(Child
对象有一个 type
属性):
@OneToMany
@OrderBy("CASE WHEN type='GIRL' THEN 1 WHEN type='BOY' THEN 2 ELSE 3 END ASC")
private List<Child> children;
最佳答案
@OrderBy
注解实际上是一个 JPA 注解,它接受实体上以逗号分隔的字段名称列表以进行排序。该顺序仅在对数据库的初始查询时执行,并且如果列表被修改则不会被维护。所以简而言之,不,你不能为 @OrderBy
注释提供纯 SQL。
一种解决方法是创建一个 View ,其中包含一个包含案例语句结果的附加列。例如:
create or replace view V_CHILD as
select
NAME VARCHAR2,
TYPE VARCHAR2,
CASE WHEN type='GIRL' THEN 1 WHEN type='BOY' THEN 2 ELSE 3 END as TYPE_ORDER
from CHILD;
然后将实体映射到 View ,就像映射表一样。该实体将包含一个 typeOrder
字段,该字段可以在 @OrderBy
注释中指定。请注意,您无法插入或更新实体,因为它基于 View 。
关于java - CASE WHEN 在 Hibernate @OrderBy 注解中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300911/