4

JPA /休止状態で次のコレクションマッピングを行うことは可能ですか?

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")

private Deque<Child> childrens;

エラーをスローします

Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements

Hibernate3でJPA2.0を使用しています

4

2 に答える 2

8

いいえ、JPA は Deque をサポートしていません。JPA 2.0仕様では、これは次のように説明されています。

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

必要な Deque 機能を提供するエンティティ メソッドに追加することをお勧めします (または Deque としてのビューを永続化されたリストに公開します)。その他の可能性は、コメント (Thor84no) で提案されているカスタム コレクションです。

于 2012-04-11T18:14:04.730 に答える
0

JPA は Mikko が述べたように Deque をサポートしていませんが、コードを更新して ArrayDeque にするだけで問題ありません。

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")

private ArrayDeque<Child> childrens;
于 2016-11-24T19:58:27.697 に答える