@ManyToOne JPA アソシエーションの CascadeType.ALL について
JPA のコンテキストでは、@ManyToOne アノテーションは 1 対多の関係を定義しますエンティティ間。 CascadeType.ALL は、親エンティティに適用されるすべての永続化操作が子エンティティに反映されるように指定するカスケード タイプです。
次のサンプル コードを考えてみましょう。
public class User { @OneToMany(fetch = FetchType.EAGER) protected Set<Address> userAddresses; } public class Address { @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) protected User addressOwner; }
この場合, Address クラスの @ManyToOne は、アドレスが 1 人のユーザーに関連付けられていることを示します。 cascade = CascadeType.ALL は、User インスタンスが削除されると、関連付けられたすべてのアドレス (Address インスタンス) もデータベースから削除されることを指定します。
このカスケード動作は有益であると同時に危険である可能性があります。
上記の例では、ユーザーが複数のアドレスを持っている場合、ユーザーを削除すると、すべてのアドレスも削除されます。一部のアドレスが他のユーザーに属していたとしても、そのアドレス。これを回避するには、アドレスからユーザーへの逆方向にカスケードする方が適切です。この方法では、アドレスを削除しても、その特定のアドレスのみがデータベースから削除され、関連付けられたユーザーはそのまま残ります。
さらに、結合の名前を指定するために @ManyToOne 関係に mappedBy 属性を含めることをお勧めします。子テーブルの列。上の例では、mappedBy="addressOwner" を Address クラスに追加して、結合列の名前が Address テーブル内の "addressOwner" であることを示すことができます。
以上が@ManyToOne JPA アソシエーションで CascadeType.ALL を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。