基于枚举的Hibernate排序

时间:2014-11-10 11:11:20

标签: java hibernate enums

我正在开发一个使用枚举作为数据库列的项目

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)

我可以用什么策略来解决这个问题?

1 个答案:

答案 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对您的枚举进行排序。