JPA:在查询中比较(> =)序数枚举

时间:2013-03-04 09:50:21

标签: java hibernate jpa-2.0

我有一个枚举,其中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实际比较的是什么?由于映射是有序的,我认为这应该有效,因为值存储为整数。

提前致谢。

1 个答案:

答案 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