我使用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文档和各种论坛,没有真正的运气。任何援助非常感谢。谢谢!
尝试创建使用Double.compare实现的compareTo一个DoubleComparator类()(),但它不起作用。最终决定采用Hibernate给我的地图,并将所有值放入一个TreeMap给我一个有序地图。谢谢,不过。 –
markerikson
哦,我的坏。对于双打,你可以使用SortType.NATURAL。无需编写比较器。然后Hibernate将基本上做你手动做的事情。 –
无法在我的情况下工作。我使用Hibernate作为Play Framework的一部分,并从YML文件中加载示例数据。 Play的YML加载代码似乎想要将我的数据加载为LinkedHashMap,当Hibernate尝试将其视为SortedMap时,会导致ClassCastException。哦,好吧 - 只要能够在运行时对它进行排序就足够了。不管怎么说,还是要谢谢你。 – markerikson