我有一个这样的枚举:
TicketPriority {
LOW(4),
NORMAL(3),
HIGH(2),
IMMEDIATE(1);
private Integer index;
TicketPriority (Integer index){
this.index = index;
}
public Integer getIndex(){
return this.index;
}
public void setIndex(Integer index){
this.index = index;
}
}
...我有一个具有优先权的Ticket实体。问题是:我需要按优先顺序排序我的结果,所以我认为这样可行,但事实并非如此:
select t from Ticket t order by t.priority.index
我从Hibernate收到错误。除了创建优先级作为实体之外,还有什么想法吗?
感谢您的任何建议! :)
答案 0 :(得分:1)
你不能这样做。
HQL查询转换为SQL执行,因此HQL查询中引用的所有属性都应存储在数据库中。由于您的index
属性未存储在数据库中,因此无法将带有它的HQL查询转换为SQL查询。
您只能在HQL查询的ORDER BY
子句中使用枚举,以按其数据库表示的自然顺序(即名称或序号)进行排序。
您有几种选择:
组织您的enum
以使其声明的顺序与其index
es的所需顺序相匹配,并将Hibernate配置为将它们作为序数存储在数据库中。如果已经配置,在您的情况下,所需的查询将是
select t from Ticket t order by t.priority desc
使用@Embeddable
/ <component>
类代替enum
将index
存储在数据库中。
index
。