2011-07-29 39 views
0

我使用Hibernate 3.6和JPA2作爲Play Framework 1.2的一部分。我有一個實體類,它需要一個Double-to-Double映射,並按鍵排序。下面是我到目前爲止有:使用JPA2和Hibernate對Java基元進行排序映射?

@Entity 
public class MyEntity extends Model 
{ 
    @ElementCollection 
    @MapKeyColumn(name="keycolumn") 
    @OrderBy("keycolumn") 
    public Map<Double, Double> myMap; 
} 

我有一個測試組數據的使用YAML被加載到我的數據庫,故意不按順序,這樣我可以驗證排序工作:

myMap: {100.0: -10.0, 200.0: -5.0, 125.0: -8.0, 300.0: -2.0, 50.0: -12.0} 

而遺憾的是,到目前爲止,它不是:

Key: 100.000000, value: -10.000000 
Key: 200.000000, value: -5.000000 
Key: 125.000000, value: -8.000000 
Key: 300.000000, value: -2.000000 
Key: 50.000000, value: -12.000000 

如果分選工作,我希望看到:

Key: 50.000000, value: -12.000000 
Key: 100.000000, value: -10.000000 
Key: 125.000000, value: -8.000000 
Key: 200.000000, value: -5.000000  
Key: 300.000000, value: -2.000000 

數據庫並不是我的強項,而且我對JPA也相當陌生。一直在挖掘Hibernate文檔和各種論壇,沒有真正的運氣。任何援助非常感謝。謝謝!

回答

0

最快的方法是讓一個SortedMap並使用@Sort:

@Sort(type = SortType.COMPARATOR, comparator = WhateverComparator.class) 

annotations reference

+0

嘗試創建使用Double.compare實現的compareTo一個DoubleComparator類()(),但它不起作用。最終決定採用Hibernate給我的地圖,並將所有值放入一個TreeMap 給我一個有序地圖。謝謝,不過。 – markerikson

+0

哦,我的壞。對於雙打,你可以使用SortType.NATURAL。無需編寫比較器。然後Hibernate將基本上做你手動做的事情。 –

+0

無法在我的情況下工作。我使用Hibernate作爲Play Framework的一部分,並從YML文件中加載示例數據。 Play的YML加載代碼似乎想要將我的數據加載爲LinkedHashMap,當Hibernate嘗試將其視爲SortedMap時,會導致ClassCastException。哦,好吧 - 只要能夠在運行時對它進行排序就足夠了。不管怎麼說,還是要謝謝你。 – markerikson

0

以下將在任何情況下工作,其中關鍵是原始包裝或您的自定義對象實現可比較。 我會避免比較器和具有對象實施比較的,這樣我可以簡單地使用

@Sort(類型= SortType.NATURAL)

相關問題