如果集合被它的“父”对象映射为all-delete-orphan ,那么更新集合的正确和简单的方法是什么?
通过更新,我不仅仅意味着从集合中添加/删除项目,还包括更新项目属性的值(当然对于之前在集合中的那些项目)。
场景是有一个Parent
对象具有一组Child
对象,并且有一个表单,用户可以通过该表单编辑 Children 集合 - 添加/删除子项,但也可以编辑子项的属性(在同一表单上)。
基本上我想要这样的东西:
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>
如果重要的话,子对象也有以相同方式映射的集合,但我认为这不相关,因为这是一个与所描述的问题相同的问题。
顺便提一句。我为此浪费了一整天的时间,当然还检查了数十个与此非常相似的问题,但还没有找到合理的解决方案或解决此问题的模式。也许我错过了什么?