2

我有一个分配给每个项目的 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 实际比较的是什么?由于映射是有序的,我认为这应该可以工作,因为值存储为整数。

提前致谢。

4

1 回答 1

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

于 2013-03-04T12:37:57.657 回答