附加实体是否必须在JPA中合并?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了附加实体是否必须在JPA中合并?相关的知识,希望对你有一定的参考价值。

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

或者是否存在合并有用的情况?我发现这个名字暗示我可以用它来处理OptimisticLockException ...... :)

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

答案

规范声明:

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

另一答案

许多年后....

关于规范

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

考虑一下......

  • 对象X是受管理的,并且具有与对象Y的OneToMany关系,其中cascade = MERGE
  • 最初,当创建类型X的对象时,没有相关的Y.
  • 对象X是持久的。
  • 稍后创建对象Y并将引用添加到X.

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

enter image description here

以上是关于附加实体是否必须在JPA中合并?的主要内容,如果未能解决你的问题,请参考以下文章

JPA:关于在删除实体之前合并实体的问题

DbContext 的通用合并:如何检查实体是不是已附加?

如何在屏幕方向更改时附加片段?

JPA - 映射来自实体的附加计算值

使用 JPA 原生查询时是不是必须选择所有实体属性?

Spring Boot JPA CrudRepository - 实体未附加到persistencecontext