没有级联注释的JPA规范合并

时间:2018-02-05 05:59:52

标签: jpa merge

合并实体的JPA规范:

Case 1:
For all entities Y referenced by relationships from X having the cascade element value
cascade=MERGE or cascade=ALL, Y is merged recursively as Y'. For all such Y referenced
by X, X' is set to reference Y'. (Note that if X is managed then X is the same object as
X'.)

Case 2:
If X is an entity merged to X', with a reference to another entity Y, where cascade=MERGE
or cascade=ALL is not specified, then navigation of the same association from X' yields a
reference to a managed object Y' with the same persistent identity as Y.


X  ----> X'
|        |
|        |
Y -----> Y'

这是否意味着MERGE级联注释是可选的?这两种情况有什么区别?

1 个答案:

答案 0 :(得分:0)

不,这意味着 - 在案例2-中它将引用持久化上下文中的旧Y实体,尽管它可能在内存中更改为Y'但是由于cascade.MERGE未设置

,因此更改未反映到持久性上下文中

编辑:首先让我们确认术语,X和Y是在Persistence上下文中合并之前的实体,X'和Y'是在Persistence上下文中合并之后的实体......在这里他说,如果是cascade.MERGE,Y'将是一个不同于旧Y的新版本,它将被新的合并实体状态覆盖(因此持久化上下文中Y的状态发生变化)....但是没有cascade.MERGE,Y将不会被合并,所以持久化上下文中的新Y实体(即Y')与旧的相同(我的意思是它的状态在合并后不会改变...我在讨论持久化上下文中的版本).. ..对Y做的更改不会反映在持久化上下文中... Y(在持久化上下文中)将保持不变,因此Y' = Y(合并后,持久化上下文中的Y状态不会改变)