私は、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)
をDouble.compare()を使用して)のcompareToを(実装DoubleComparatorクラスを作成しようとした使用できるように、オブジェクトは、Comparableを実装なければなりませんしかしそれはうまくいかなかった。最終的には、Hibernateが私に与えるマップを取得し、すべての値をTreeMapに移動して、ソートされたマップを取得します。しかし、ありがとう。 –
markerikson
ああ、私の悪い。 double型の場合は、SortType.NATURALを使うことができます。コンパレータを書く必要はありません。その後、Hibernateは本質的にあなたが手動でやっていることを行います。 –
私の場合は問題を起こしてしまいました。私は、Play Frameworkの一部としてHibernateを使用していて、YMLファイルからサンプルデータを読み込んでいます。 PlayのYML読み込みコードは、私のデータをLinkedHashMapとしてロードしたいと思われます。その結果、HibernateがSortedMapとして扱うときにClassCastExceptionが発生します。ああ、まあ、実行時にソートするだけで十分です。とにかくありがとう。 – markerikson