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 に答える