JPA如何在从父级使用合并但是创建子级时获取生成的id /对象?

Ioa*_*nis 8 java jpa

我有一个先前已被持久化并@OneToMany与另一个实体有关系的实体.为了添加新实体,我只需在托管对象中添加我的新实体,并用于cascadeType.ALL保留更改.有没有办法让我可以获取新创建的对象的id或获取我与合并使用的原始(非托管)对象更新其ID?

在伪代码中,我希望发生以下情况:

  1. 合并实体将返回新副本
  2. 旧副本将更新为新实体

示例:父A,id = 13子B,id = 0

本质上,我想merge在父级persist上发布一个,但是在子级上进行级联(以便更新原始子实例,而不是复制).

显然这不会发生.我使用hibernate作为提供者.

Ioa*_*nis 8

如果您进行研究,Stackoverflow 帖子JPA文档都有答案.

我想要的方法是persist托管父级上使用.这将忽略父级的任何更改,但会级联persist(假设它已设置为级联).之后,子对象将具有正确的ID.

....
JPAEntity newObject=new JPAEntity();
managedObject.addChild(newObject);
em.persist(managedObject)
newObject.getId() //work fine!
Run Code Online (Sandbox Code Playgroud)