2011-07-29 42 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)

相关问题