我有一个枚举,其中int值分配给每个项目。
public enum RankEnum {
NO_RANK(0),
FIRST_RANK(1),
...,
LAST_RANK(7);
private int rank;
RankEnum(int rank) { this.rank = rank; }
public int getRank() { return this.rank; }
}
整数值的内容是为了更容易地将不同的元素相互比较,关于它们的等级(例如e1.rank< e2.rank2)。所以我将它们映射到我的实体中:
@Column(...)
@Enumerated(EnumType.ORDINAL)
private RankEnum rank;
不幸的是,当我尝试创建查询以查找例如排名高于另一个实体x的所有实体时,结果不正确。
Select entity FROM Entity entity WHERE entity.rank > :rank
:rank绑定到x.getRank();
所以问题是:在这种情况下,jpa实际比较的是什么?由于映射是有序的,我认为这应该有效,因为值存储为整数。
提前致谢。
答案 0 :(得分:0)
枚举的序数与您为每个枚举实例分配的等级无关。每个枚举都有一个序数。对于第一个声明的序数,序数从0开始,然后是1,然后是2,等等:
public enum Season {
WINTER, // ordinal = 0
SPRING, // ordinal = 1
SUMMER, // ordinal = 2
AUTUMN; // ordinal = 3
}
枚举可自动按其序数进行比较。所以Season.WINTER.compareTo(Season.SPRING) < 0
。