我想從按優先級列排序的表中獲取數據,該列是enum。我們使用javaee 6,GF 3.1。JPQL通過枚舉排序
我們的實體看起來像這樣
@Entity
@Table(name="ITEMS")
@NamedQueries({
@NamedQuery(
name = "Item.findbyPriority",
query = "select i from Item i where ORDER BY i.priority DESC")
})
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
String data inputFile;
@Enumerated(EnumType.ORDINAL)
Priority priority;
...
}
的優先權,由序定義
public enum Priority {
HIGH,
NORMAL;
}
然而Item.findbyPriority查詢排序,並返回導致錯誤的順序。如果我將優先級改爲
public enum Priority {
NORMAL,
HIGH;
}
它工作正常。但那不是很健壯。如果我添加新的優先使用或重新排序呢?
我試着重寫compareTo方法,但它在Enum類中是final的。
我能在這種情況下做什麼?如何以好方式完成?
我知道我可以將優先級存儲爲數字等,但是我必須手動將實體同步到Enum,這不是非常好。 也許@PrePersist,@PreUpldate和@PostLoad方法是否可行?那麼jpql查詢怎麼樣?
感謝,
米蘭
感謝您的回答,以及您說的基本上是重新排序返回的結果,我是對嗎? – udik 2012-08-08 15:24:41
的確,你是對的。 – 2012-08-29 04:48:14