【发布时间】:2013-07-22 21:03:27
【问题描述】:
我有一个实体,该实体之前已被持久化,并且与另一个实体具有@OneToMany 关系。为了添加一个新实体,我只需在托管对象中添加我的新实体并使用cascadeType.ALL 来保存更改。有没有办法可以获取新创建对象的 id 或获取与合并一起使用的原始(非托管)对象以更新其 id?
在伪代码中,我预计会发生以下情况:
- 将为合并的实体返回新副本
- 将针对新实体更新旧副本
示例: 父母 A,id=13 孩子 B,id=0
本质上,我想在父级上发出merge,但在子级上级联persist(以便更新原始子实例,而不是复制)。
显然这不会发生。 我正在使用休眠作为提供程序。
【问题讨论】:
-
您使用的是什么数据库、JPA 提供程序和 id 生成策略?使用 Oracle 11g + Hibernate +
@SequenceGenerator,对象级联很好,并返回新分配的 id。 -
我正在使用 MySql 和
@GeneratedValue。我不喜欢池化 id,我认为这就是它适用于 Oracle/SequenceGenerator的原因 -
@johnd 我对问题进行了编辑以试图澄清;如果我误解了,请撤回我的更改。
-
感谢您的更新。我找到了另一种解决方法,即加载父对象,添加我的新对象和
persist而不是合并。这是迄今为止最好的解决方案,但是能够使用合并并且只将persist级联到新实体会更好。