Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问HQL中的枚举属性?_Java_Hibernate_Enums_Hql - Fatal编程技术网

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)批注。谢谢,再来一次!