@ManyToOne JPA アソシエーションの CascadeType.ALL の意味は何ですか? 質問する

@ManyToOne JPA アソシエーションの CascadeType.ALL の意味は何ですか? 質問する

人間関係の文脈におけるカスケードの意味を誤解していたようです@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と思います) にどのような影響を与えますか?

ベストアンサー1

の意味はCascadeType.ALL、永続性によって、関連するエンティティにすべてのEntityManager操作 ( ) が伝播 (カスケード) されるということです。PERSIST, REMOVE, REFRESH, MERGE, DETACH

Addressあなたの場合、 を削除すると関連する も削除されるため、これは悪い考えのようですUser。ユーザーは複数のアドレスを持つことができるため、他のアドレスは孤立してしまいます。ただし、逆の場合 ( に注釈を付けるUser) は意味があります。アドレスが 1 人のユーザーのみに属している場合は、このユーザーが削除された場合に、そのユーザーに属するすべてのアドレスの削除を安全に伝播できます。

ところで、結合列が ADDRESS テーブルにある必要があることを永続性プロバイダーに通知するために、mappedBy="addressOwner"属性を追加することもできます。User

おすすめ記事