我正在开发一个使用枚举作为数据库列的项目
public enum MyEnum{
a1(1,"act1"),
a2(2,"act2"),
a3(3,"act3"),
b1(4,"bob1"),
c1(10,"cake1"),
c2(11,"cake2"),
}
@Entity
public class MyEntity{
..
private Integer myEnumIntValue;
...
}
(注意:myEnumIntValue未映射为实体中的枚举)
我有一个hibernate查询来查询MyEntity。查询根据枚举
的int值对结果进行排序createCriteria(MyEntity.class).addOrder("myEnumIntValue");
直到枚举变为
,这一切都很好Public enum MyEnum{
a1(1,"act1"),
a2(2,"act2"),
a3(3,"act3"),
a4(7,"act4"),
b1(4,"bob1"),
c1(10,"cake1"),
c2(11,"cake2")
}
现在它成为一个问题,因为我得到的结果的顺序是(a1,a2,a3,**b1,a4**,c1,c2)
,但实体的排序应该是(a1,a2,a3,**a4,b1**,c1,c2)
我可以用什么策略来解决这个问题?
答案 0 :(得分:0)
如果您不希望/无法操纵查询以便在获取时对枚举进行排序,请记住所有枚举都会实现Comparable interface
。
您可以覆盖compareTo()
方法并从java代码中进行排序直接。
具体说明:
public enum MyEnum{
a1(1,"act1"),
a2(2,"act2"),
a3(3,"act3"),
b1(4,"bob1"),
c1(10,"cake1"),
c2(11,"cake2");
private number;
private name;
public MyEnum(Integer number, String name){
this.number = number;
this.name = name;
}
//getters and setters
@Override
public int compareTo(MyEnum otherEnum){
return this.getName().compareTo(otherEnum.getName());
}
}
只要您从数据库中取出List<MyEnum> myList
,您就必须致电:
Collections.sort(myList);
通过name
对您的枚举进行排序。