gpt4 book ai didi

java - 如何访问 HQL 中的枚举属性?

转载 作者:行者123 更新时间:2023-11-30 11:55:38 24 4
gpt4 key购买 nike

我有一个这样的枚举:

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 得到一个错误。除了将 Priority 创建为实体之外还有什么想法吗?

感谢任何建议! :)

最佳答案

你不能这样做。

HQL查询被转换为SQL执行,因此HQL查询中引用的所有属性都应该存储在数据库中。由于您的 index属性不存储在数据库中,使用它的 HQL 查询不能转换为 SQL 查询。

您可以在 ORDER BY 中使用枚举HQL 查询的子句仅按其数据库表示的自然顺序(即名称或序号)排序。

您有多种选择:

  1. 整理您的 enum s 以便他们的声明顺序与他们的 index 的所需顺序相匹配es 并配置 Hibernate 以将它们作为序号存储在数据库中。如果它已经配置,在您的情况下所需的查询将是

    select t from Ticket t order by t.priority desc
  2. 使用 @Embeddable/<component>类而不是 enum存储index在数据库中。

  3. 编写一个自定义类型来将您的枚举表示为 index .

关于java - 如何访问 HQL 中的枚举属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com