JPA-合并操作,合并引用VS合并关系



我最近一直在研究JPA中可用的实体状态和操作集(persistmerge等)

今天我在这里读到了关于merge操作的

我想我不太理解关于合并级联的两句话。

在对象上调用merge还将在标记为级联合并的任何关系上级联merge操作。即使关系不是级联合并,引用仍将被合并。如果关系是级联合并,则关系和每个相关对象都将被合并

有人能解释一下引用背后到底隐藏着什么吗?在这种情况下,合并引用合关系和相关对象之间的区别是什么?

从链接中还不清楚您所指的是作者想要传达的确切含义,但您可以从这里参考JPA规范中的最终解释。应用于实体X的合并操作的语义如下:

•如果X是一个分离的实体,则X的状态将复制到具有相同标识或新的已存在托管实体实例X'创建了X的托管副本X'。

•如果X是新的实体实例,则新的托管实体实例X'是创建并将X的状态复制到新的托管实体中实例X'。

•如果X是已删除的实体实例,则会出现IllegalArgumentException由合并操作引发(或者事务提交将失败)。

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

•对于由X的关系引用的所有实体Y级联元素值cascade=MERGE或cascade=ALL,Y合并递归地作为Y’。对于X引用的所有此类Y,X'设置为参考Y’。(请注意,如果X是托管的,那么X与X’)

•如果X是一个合并到X'的实体,并引用另一个实体Y、 其中未指定cascade=MERGE或cascade=ALL,则从X'导航同一关联会生成对具有与Y.相同的持久标识的托管对象Y'

正如您在项目符号4和5中看到的,合并级联操作递归地应用于每个关系。

最新更新