人間関係の文脈におけるカスケードの意味を誤解していたようです@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