1. ホーム

[解決済み】@ManyToOne JPAアソシエーションのCascadeType.ALLの意味は何ですか?

2022-04-01 15:50:16

質問

の文脈でカスケードの意味を誤解していたようです。 @ManyToOne の関係です。

事件のこと

public class User {

   @OneToMany(fetch = FetchType.EAGER)
   protected Set<Address> userAddresses;

}

public class Address {

   @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
   protected User addressOwner;

}

の意味は何ですか? cascade = CascadeType.ALL ? 例えば、あるアドレスをデータベースから削除する場合、そのアドレスに cascade = CascadeType.ALL は私のデータに影響を与えます( User ということでしょうか?)

どのように解決するのですか?

の意味は CascadeType.ALL は、パーシステンスがすべての EntityManager の操作( PERSIST, REMOVE, REFRESH, MERGE, DETACH ) を関連するエンティティに適用する。

を削除することは、あなたの場合、悪い考えであるように思えます。 Address を削除すると、関連する User . ユーザは複数のアドレスを持つことができるため、他のアドレスは孤児となる。しかし、その逆のケース(アドレスにアノテーションをつける)では User あるアドレスが単一のユーザにのみ属している場合、そのユーザが削除されると、そのユーザに属しているすべてのアドレスの削除が伝播されるのは安全です。

ちなみに、このような場合には mappedBy="addressOwner" 属性に User を使用して、結合カラムがADDRESSテーブルにあるべきことを永続性プロバイダに通知します。