3

結果が得られずに約1時間Googleに頭をぶつけていたので、誰かが休止状態の問題を解決してくれることを願っています。

したがって、問題は、クラスに SortedMap があり、Integer を Key (およびその自然な組み込みの compareTo メソッド) として使用し、別のクラスを値の型として使用していることです。キーを使用して、値の型のユーザー定義の順序を維持し、Hibernate にこれを保持させようとしています。

何らかの理由で、Hibernate はデフォルトで入力したキーを無視し、代わりに値型の主キーをキーとして使用します。データベースから Map をロードすると、すべてのキーがこのように変更されています。

Map の定義を以下に示します (注釈スタイルの Hibernate を使用しています)。

@ManyToMany(cascade = CascadeType.ALL)
@MapKey
@Sort(type = SortType.NATURAL)
private SortedMap<Integer, Column> columnOrder;

Column タイプを使用して順序自体を格納することはできません。Column は、毎回異なるキー値を使用して、包含タイプの多くのインスタンスで使用される可能性があるためです。どんなガイダンスでも大歓迎です。

4

2 に答える 2

2

したがって、同様の問題でこの StackOverflow の質問を発見した後、答えを見つけました: JPA2 と Hibernate を使用した Java プリミティブのソートされたマップ?

@MapKey アノテーションを @MapKeyColumn アノテーションに変更することで、以下のように、指定した列名でキーを永続化するように Hibernate に指示することができました。

@ManyToMany(cascade = CascadeType.ALL)
@MapKeyColumn(name = "hierarchyOrdering")
@Sort(type = SortType.NATURAL)
private SortedMap<Integer, Column> columnOrder;

助けてくれてありがとう。

于 2012-10-10T14:28:37.570 に答える
1

の javadoc からjavax.persistence.OrderColumn:

リストの永続的な順序を維持するために使用される列を指定します。永続化プロバイダは、取得時およびデータベース内で順序を維持する責任があります。永続化プロバイダーは、リストに影響を与える挿入、削除、または並べ替えを反映するために、データベースへのフラッシュ時に順序を更新する責任があります。

そのため、リストを使用することが可能です。

JPA 2.0 仕様のセクション 2.2 Persistent Fields and Properties には次のように記載されています。

コレクション値の永続フィールドおよびプロパティは、エンティティ クラスが上記の JavaBeans メソッド規則に準拠しているかどうか、およびフィールドまたはプロパティ アクセスが使用されているかどうかに関係なく、次のコレクション値インターフェイスのいずれかに関して定義する必要があります。 java.util.Collection 、java.util.Set、java.util.List[3]、java.util.Map. コレクション実装型は、エンティティが永続化される前に、フィールドまたはプロパティを初期化するためにアプリケーションによって使用される場合があります。エンティティが管理される (または分離される) と、その後のアクセスはインターフェイス タイプを介して行う必要があります。

したがって、 aSortedMapは JPA でサポートされていないようです。

于 2012-10-10T13:56:39.383 に答える