3

次のように:

//User class...

@ManyToOne(cascade=CascadeType.REMOVE)
@JoinColumn(name="INSTITUTION_ID")
public void setInstitution(final Institution institution) {
    this.institution = institution;
}

これは、Userオブジェクトを削除すると、それに関連付けられているInstitutionオブジェクトが削除されることを意味しますか?その場合、なぜこれが必要になるのかについては説明しません。たとえば、教育機関には多くのユーザーがいたとします。これは、それらのユーザーの1人を削除すると機関が削除されることを意味しますか?その場合、他のすべてのユーザーも機関を失いますか?

4

1 に答える 1

4

そうです、CascadeType.REMOVEをManyToManyまたはManyToOneで使用する必要はほとんどなく、移植性のない構成です。これは、JPA2.0仕様で次のように文書化されています。

リレーションシップモデリングアノテーションは、cascade=REMOVE指定の使用を制限します。カスケード=REMOVE指定は、OneToOneまたはOneToManyとして指定されたアソシエーションにのみ適用する必要があります。cascade=REMOVEを他のアソシエーションに適用するアプリケーションは移植性がありません。

それが存在する理由は、カスケードの許可された値をCascadeType列挙の値のサブセットに制限する合理的な方法がなかったというだけの可能性があります。

于 2012-05-16T16:19:37.037 に答える