当前位置: 首页 > 面试题库 >

JPA从父级合并但创建子级时,如何获取生成的ID /对象?

邵祺
2023-03-14
问题内容

我有一个以前被保留的实体,并且@OneToMany与另一个实体有关系。为了添加新实体,我只需将新实体添加到托管对象中,并用于cascadeType.ALL保留更改。有没有一种方法可以获取新创建的对象的ID或获取我用于合并以更新其ID的原始(非托管)对象?

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

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

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

从本质上讲,我想merge在父级persist上发布a ,但在子级上级联(以便原始子实例被更新,而不是复制)。

显然这不会发生。我正在使用休眠作为提供程序。


问题答案:

只要您进行研究,JPA文档都会提供答案。

我要执行的操作的方法是persist托管
父项上使用。这将忽略对父项的任何更改,但会级联persist(前提是已将其设置为级联)。之后,子对象将具有正确的ID。

....
JPAEntity newObject=new JPAEntity();
managedObject.addChild(newObject);
em.persist(managedObject)
newObject.getId() //work fine!


 类似资料:
  • index.js Button.js 我的问题是“如何从Button.js到index.js获取标志值”?(儿童对父母)。

  • 假设我有一个应用程序来处理一系列的书。 我的应用程序允许向库中添加新书。创建书籍时,用户可以在列表中选择作者,如果作者尚不存在,则可以将其添加到列表中,并在表单字段中提供其姓名。填写表单后,数据将发送到WS,类似 然后我将json映射到我的实体中 书: 作者 这不会像用户尝试添加新作者一样工作,当我尝试. sav()时,我会收到错误: 组织。冬眠TransientPropertyValueExce

  • 问题内容: 假设我们有3个Entities对象类: 如何使用JPA2.x(或hibernate)批注来: 父级删除时(一对多)自动删除所有子级 删除后自动从子级列表中删除子级(多对一) 儿童删除时(一对一)自动删除玩具 我正在使用Hibernate 4.3.5和mysql 5.1.30。 谢谢 问题答案: 如本文所述, 实体状态转换应从父级到子级联,而不是相反。 您需要这样的东西:

  • 父对象放在spring控制器的@SessionAttributes中,这是原因吗? 即使我只合并子列表,合并(childList),它也创建新记录而不是更新。

  • 问题内容: 这是我的JPA结构: 电影(看级联类型): 评分: RatingId: 当我致电时,我得到了。如果删除级联,则合并调用不会引发错误。哪里可能有问题? 我认为这个问题与复合主键有关。在具有相同一对多关系但没有复合ID的另一个实体上执行时没有错误。 问题答案: StackOverflow是由循环关系引起的。为了避免出现异常,我在多对多表中将键标记为。

  • 我使用的是Spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的身份证,但我发现我得到的是空的。 我在getId()方法中添加了@GeneratedValue(Strategy=GenerationType.IDENTITY),但它不起作用。 以下是模型: 父实体已经在数据库中,所以我直接找到它,父存储库entends Jpa列举 这里是我的测试代码: 我得到的输出