コレクションが「親」オブジェクトによってall-delete-orphanにマップされている場合、コレクションを更新する正しい簡単な方法は何でしょうか?
更新とは、コレクションに項目を追加/削除することだけではなく、項目のプロパティの値を更新することも意味します (もちろん、以前にコレクションにあった項目の場合)。
シナリオでは、Parent
オブジェクトのコレクションを持つオブジェクトがあり、Child
ユーザーが Children コレクションを編集できるフォームが 1 つあります。子を追加/削除するだけでなく、子のプロパティを(同じフォームで) 編集することもできます。
基本的に私はこのようなものが欲しい:
Parent parent = session.get(Parent.class, parentUI.getId());
parent.setChildren(parentUI.getChildren()); // parentUI is a DTO
session.saveOrUpdate(parent);
これは機能せず、その理由は理解できますが、休止状態を使用して UI アプリケーションを開発する場合、これは非常に一般的な状況であるように思われるため、(本による) 解決策を探しています。
私は休止状態 3.6.10 と XML ベースの構成を使用しています。
関連するマッピングは次のとおりです (子コレクションの格納に ArrayList を使用しています)。
<list name="children" cascade="all, delete-orphan">
<key column="parent_id" not-null="true"/>
<list-index column="ordinal" />
<one-to-many class="Child" />
</list>
それが重要な場合、子オブジェクトにも同じ方法でコレクションがマップされていますが、それは説明されている問題と同じ問題であるため、関連性はないと思います。
ところで。私はこれで一日を失い、もちろんこれと非常によく似た質問を何十もチェックしましたが、これを解決するための合理的な解決策やパターンは見つかりませんでした. おそらく私は何かを逃していますか?