Java 如何访问HQL中的枚举属性?
我有这样一个枚举:Java 如何访问HQL中的枚举属性?,java,hibernate,enums,hql,Java,Hibernate,Enums,Hql,我有这样一个枚举: 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){ th
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;
}
}
。。。我有一个具有优先级的票证实体。问题是:我需要按优先级排列结果,所以我认为这会起作用,但没有:
select t from Ticket t order by t.priority.index
我从Hibernate得到一个错误。除了作为一个实体创建优先级之外,还有什么想法吗
谢谢你的建议!:) 你不能这样做 HQL查询转换为SQL以执行,因此HQL查询中引用的所有属性都应存储在数据库中。由于您的
索引
属性未存储在数据库中,因此使用它的HQL查询无法转换为SQL查询
您可以在HQL查询的ORDER BY子句中使用枚举,仅按照其数据库表示形式的自然顺序(即名称或序号)进行排序
您有几个选择:
enum
s,使它们的声明顺序与其索引的所需顺序相匹配,并配置Hibernate以将它们作为序号存储在数据库中。如果已经配置了,那么在您的情况下,所需的查询将是
select t from Ticket t order by t.priority desc
@embeddeble
/
类而不是enum
在数据库中存储索引
索引
我很困惑。。。如果您的票证是一个实体,并且它包含一个优先级,那么优先级是否也会成为一个实体,它首先不能在Hibernate中工作?您不能发布错误或stacktrace吗?这只是在黑暗中拍摄,没有更多细节。我稍后会发布错误,但基本上hibernate告诉我我的索引变量不存在(谢谢老兄!我将尝试第一个。我不知道这是可能的。似乎我必须使用@Enumerated(EnumType.ORDINAL)批注。谢谢,再来一次!