我最近一直在研究JPA中提供的实体状态和操作集(persist
,merge
等。)
今天我正在阅读merge
操作here
我想我不太明白两个关于合并级联的句子。
在对象上调用
merge
也会将merge
操作级联到任何标记为级联合并的关系。即使关系不是级联合并,引用仍将合并。如果关系是级联合并,则关系和每个相关对象将合并。
有人可以在一些例子中解释究竟隐藏在参考背后的内容,以及在此背景下合并参考与合并关系和相关之间的区别对象?
答案 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点中所看到的,合并级联操作以递归方式应用于每个关系。