【发布时间】:2011-04-06 01:27:28
【问题描述】:
目前,我的项目使用@Enumerated(EnumType.ORDINAL),所以当我按此列排序时,它是根据enum中的顺序排序的,效果很好。但是我需要在enum 中添加一些额外的值,这些值需要插入到枚举值列表中的不同位置,并且不能仅仅添加到底部以保持正确的排序顺序。
如果我这样做,我的数据库就会被弄乱。我将不得不编写一些脚本来将所有这些序数值转换为正确的新序数。以后可能需要添加更多状态。由于我必须修复数据库中的所有数据,因此我只想做一次,因为这将是一项艰巨的任务。
所以我正在考虑切换到 EnumType.STRING 以不必再次重新映射数据库中的序数值。但是如果我这样做,那么我该如何正确排序呢?枚举字符串的字母顺序不是我需要的顺序。
使用下面的类,当我按属性“状态”排序时,结果按以下顺序出现:
hql = "from Project order by status"
Development
Planning
Production
我希望他们按这个顺序出来,不使用EnumType.ORDINAL:
Planning
Development
Production
如果不为enum 创建表或向Project 类添加额外的列,这是否可行?我试过了,但它抛出了一个异常:
hql = "from Project order by status.sort"
枚举:
public enum Status {
PLANNING("Planning", 0),
DEVELOPMENT("Development", 1),
PRODUCTION("Production", 2);
private final String name;
private final int sort;
private Status(String name, int sort) {
this.name = name;
this.sort = sort;
}
@Override
public String toString() {
return name;
}
}
实体:
@Entity
public class Project {
private Long id;
private Status status;
@Id
@GeneratedValue
public Long getId() {
return this.id;
}
private void setId(Long id) {
this.id = id;
}
@Enumerated(EnumType.STRING)
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
}
【问题讨论】:
标签: java hibernate orm enums hql