使用JPA2和Hibernate对Java原语进行排序?

时间:2011-07-29 19:22:40

标签: hibernate jpa

我正在使用Hibernate 3.6和JPA2作为Play Framework 1.2的一部分。我有一个实体类,需要一个Double-to-Double地图,按键排序。这是我到目前为止所得到的:

@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文档和各种论坛,没有真正的运气。非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

最快的方法是使其成为SortedMap并使用@Sort:

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

annotations reference

答案 1 :(得分:0)

以下将适用于key是原始包装器或实现可比较的自定义对象的情况。 我会避免使用比较器并让Object实现Comparable,这样我就可以简单地使用

@Sort(type = SortType.NATURAL)