2

私は2つのエンティティを持っています

@Entity
@Table(name="parent")
public class Parent {
  @Id
  String uuid;

  @ElementCollection(fetch=FetchType.EAGER)
  @CollectionTable(
      name="child",
      joinColumns=@JoinColumn(name="parent_uuid", insertable=false, updatable=false)
  )

  @Column(name="uuid")
  private Set<String> childrenUuids = new HashSet<String>();
}

@Entity
@Table(name="child") 
public class Child {
  @Id
  String uuid;

  @Column(name="parent_uuid")
  String parentUuid;

}

これで、Parentを永続化すると、ManyToOne関係のため、childrenUuidsの子が自動的に永続化されます。親へのすべての操作(例:persist、remove ...)がChildにカスケードされないようにしたいのですが、JPAは可能ですか?私は数日間調査を続けていますが、答えが見つかりませんでした。ありがとうございました。

4

2 に答える 2

1

@ElementCollectionの代わりに@OneToManyを使用する必要があります。@OneToManyは、デフォルトではカスケードされません。@ElementCollectionは、私が知る限り、「@ ElementCollectionは基本型または埋め込み可能クラスのインスタンスのコレクションを定義する」ため、常にカスケードされ、基本型/埋め込み可能はその親の不可欠な部分と見なされます。

于 2012-09-16T18:18:45.907 に答える
0

@ElementCollectionは常にカスケードします。@ElementCollectionのソリューションを実装することで、最終的にこれを解決します。引き続きJPAアノテーションを使用しますが、代わりに、@ ElementCollectionの上に@Transientを追加して、JPAがそれを無視するようにします。次に、実装をJPAポストロードリスナーとして各エンティティに配置します。これにより、エンティティがロードされた後に各コレクションがいっぱいになります。

于 2012-09-17T06:14:34.763 に答える