2013-03-04 58 views
1

我有一個int值分配給每個項目的枚舉。JPA:在查詢中比較(> =)序號枚舉

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; } 
    } 

整數值的intetion是使其更容易彼此不同的元素,關於它們的秩比較(例如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

那麼你有沒有看過什麼樣的SQL? – 2013-03-04 09:51:51

+0

...其中entity0_.RANK>? – Alex 2013-03-04 10:22:54

+0

好的,RANK在數據庫中看起來像什麼?你說結果「不正確」 - 與你期望的相比,會發生什麼? – 2013-03-04 10:25:46

回答

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

+0

好吧,忘記我分配的整數...但仍然在我的問題中發佈的查詢不起作用。因此,比較基於序數值的枚舉似乎不適用於JPA。 – Alex 2013-03-04 13:09:33

+0

啓用SQL日誌記錄,並查看生成了哪個SQL查詢以及哪些參數。告訴我們數據庫包含的內容,測試的結果,期望的結果以及取得的結果。檢查你的測試:你的問題的標題是'> =',但查詢說''''。 – 2013-03-04 13:47:36