对于附属实体,在 JPA 中合并是否有必要?

2022-09-03 02:05:13

只要我只处理附加的托管实体,我就永远不需要使用 ,这是正确的吗?换句话说,调用附加的托管实体是否有效?EntityManager#merge()merge()

还是存在合并可以达到目的的情况?我发现这个名字表明我可以用它来处理......:)OptimisticLockException

编辑:简单来说,我对托管实体的理解是,其属性/字段的修改在事务结束时会持久保存到数据库中。


答案 1

规范指出:

如果 X 是托管实体,则合并操作将忽略它,但是,如果 X 的关系已使用级联元素值或注释批注注释了这些关系,则合并操作将级联到由 X 中的关系引用的实体。cascade=MERGEcascade=ALL


答案 2

许多年后....

关于规格

如果 X 是托管实体,则合并操作将忽略它,但是,如果已使用级联元素值 cascade=MERGE 或 cascade=ALL 注释对这些关系进行批注,则合并操作将级联到 X 中的关系所引用的实体。

考虑一下...

  • 对象 X 是托管对象,并且与对象 Y 具有一对多关系,级联 =MERGE
  • 最初,当创建类型 X 的对象时,没有相关的 Y。
  • 对象 X 持久化。
  • 稍后将创建对象 Y,并向 X 添加一个引用。

我的理解是,合并是在此阶段保留所有更改的正确操作,因此在某些情况下可以对托管实体调用合并。

enter image description here


推荐