A と B の 1 対 1 の関係を持つ 2 つのエンティティがあります。B エンティティはオプションであり、単独で更新および削除できますが、常に A のインスタンスにリンクする必要があります。
したがって、双方向の関係を持つ2つのJPAエンティティAとBがあります。これはAからBへのものです。
@OneToOne(mappedBy = "a", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
A と B を作成し、A を削除すると、両方とも削除されます。良い。
しかし、A から B へのカスケードのため、iem.remove(b)
の場合、削除は永続化されません。私がa.setB(null)
最初にやったとしても。
カスケードを維持しながらオプションのエンティティを削除する唯一の方法は、新しい JPA2 機能である orphanRemoval=true を使用することのようです。を呼び出しa.setB(null)
てから、A を永続化します。
これは、B に対して直接操作を実行できないことを意味します。構成関係が強すぎることを意味し、B に対するすべてのアクションは A を介して実行する必要があります。
しかし、B は埋め込みオブジェクトではなく、それ自体が本格的なエンティティです。A とは別に削除するにはどうすればよいですか?
最善の方法は、カスケードを削除し、A? B テーブルの FK 制約によって適用されます。
これはとても簡単なケースです。2 つの関連するエンティティの場合、一方の関係はオプションであり、他方の関係は必須です。
ああ、これは休止状態の 4.2.3-Final です