次の 2 つのエンティティを考えてみましょう。
@Entity
public class A implements Serializable {
...
@OneToMany(mappedBy = "a", orphanRemoval = true)
@Cascade(CascadeType.ALL)
@JsonManagedReference
private List<B> bs = new ArrayList<B>();
...
}
@Entity
public class B implements Serializable {
...
@ManyToOne
@JsonBackReference
private A a;
...
}
A の JSON 表現を受け取り、Spring コントローラーの 1 つで @RequestBody を介してロードしています (この場合、これは既に識別子を持っている既存のエンティティです。次の問題は新しいエンティティには当てはまりません)。
ご想像のとおり、session.saveOrUpdate を呼び出しても、逆シリアル化された A.bs コレクションに含まれていない B を (データベースから) 魔法のように自動的に削除することはありません。コレクション内の個々のエンティティの更新と同様に、コレクションへの追加は機能します。
これらのオブジェクトを削除する適切な方法は何ですか? これが機能するには、リクエストを別の構造にする必要がありますか? (Spring 3.1.1 / Hibernate 4.0.1 を使用)