2011-07-29 5 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を使用して、私のDBにロードされるデータのテストセットを故意ではない持っている:

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のドキュメントや様々なフォーラムを掘り下げました。どんな支援も大歓迎です。ありがとう!

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

annotations referenceごと:

答えて

0

最も簡単な方法は、それのSortedMapを作り、@Sort使用することです。

+0

をDouble.compare()を使用して)のcompareToを(実装DoubleComparatorクラスを作成しようとした使用できるように、オブジェクトは、Comparableを実装なければなりませんしかしそれはうまくいかなかった。最終的には、Hibernateが私に与えるマップを取得し、すべての値をTreeMap に移動して、ソートされたマップを取得します。しかし、ありがとう。 – markerikson

+0

ああ、私の悪い。 double型の場合は、SortType.NATURALを使うことができます。コンパレータを書く必要はありません。その後、Hibernateは本質的にあなたが手動でやっていることを行います。 –

+0

私の場合は問題を起こしてしまいました。私は、Play Frameworkの一部としてHibernateを使用していて、YMLファイルからサンプルデータを読み込んでいます。 PlayのYML読み込みコードは、私のデータをLinkedHashMapとしてロードしたいと思われます。その結果、HibernateがSortedMapとして扱うときにClassCastExceptionが発生します。ああ、まあ、実行時にソートするだけで十分です。とにかくありがとう。 – markerikson

0

以下は、keyがプリミティブラッパーであるか、それとも同等のものを実装するカスタムオブジェクトであるかのどちらの場合でも機能します。 iはコンパレータを回避し、私は単に

@Sort(タイプ= SortType.NATURAL)

関連する問題