【发布时间】:2013-03-04 09:50:20
【问题描述】:
我有一个枚举,每个项目都分配了 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
@Column(...)
@Enumerated(EnumType.ORDINAL)
private RankEnum rank;
不幸的是,当我尝试创建查询以查找例如所有排名高于另一个实体 x 的实体时,结果不正确。
Select entity FROM Entity entity WHERE entity.rank > :rank
:rank 绑定到 x.getRank();
所以问题是:在这种情况下,jpa 实际比较的是什么?由于映射是有序的,我认为这应该可以工作,因为值存储为整数。
提前致谢。
【问题讨论】:
-
你看过生成的 SQL 了吗?
-
...在哪里 entity0_.RANK > ?
-
好的,RANK 在数据库中是什么样子的?您说结果“不正确” - 与您的预期相比会发生什么?
-
在数据库中排名是一个 NUMBER(2,0) 并且似乎被正确存储。在我的测试中,我有 entity1.rank = NO_RANK(存储为 0)和 entity2.rank = SECOND_RANK(存储为 2)。当我对 entity1 执行上述查询时,我得到一个空列表,但我希望 entity2 作为结果。