JPA - 合并操作,合并参考VS合并关系

时间:2015-03-21 12:51:52

标签: java-ee jpa merge

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

今天我正在阅读merge操作here

我想我不太明白两个关于合并级联的句子。

  

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

有人可以在一些例子中解释究竟隐藏在参考背后的内容,以及在此背景下合并参考合并关系和相关之间的区别对象

1 个答案:

答案 0 :(得分:2)

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

  

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

     

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

     

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

     

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

     

•对于来自X的关系所引用的所有实体Y具有   级联元素值级联= MERGE或级联= ALL,Y合并   递归地为Y'。对于由X引用的所有这样的Y,X'被设置为   参考Y'。 (注意,如果X被管理,那么X是与之相同的对象   X”)

     

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

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