hibernate 5.0.9 を使用するアプリケーションでは、ネストされた親子関係があり、親は以下のように表される関係所有者です。
テーブル: -
ParentEntity
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
@OrderBy("listOrder ASC, dateCreated ASC")
private Set<ChildEntity> childCollection;
ChildEntity
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "child_id")
@OrderBy("col_id ASC, list_order ASC")
private Set<GrandChildEntity> grandChildCollection;
GrandChildEntity
次のように、親の子と孫を更新したい:-
DB から既存の親を読み取り、すべての子とその孫のセットを取得します。既存の grandChild をある子から別の子に移動するため、grandChild の DB 内のすべての列をそのままにする必要があることを除いて、grandChild の子の参照のみを更新する必要があります。
この操作を実行するために hibernate merge by を使用しようとしていますが、例外がスローされます:
削除されたオブジェクトはカスケードによって再保存されます (関連付けから削除されたオブジェクトを削除します)
既存の子コレクションから孫を削除し、単一のトランザクションで他の子コレクションにアタッチするにはどうすればよいですか??