0

我想知道当我这样做时真正发生了什么:

Person p1 = new Person();
...
p1.save()

就保存更新的级联顺序而言。

这里有一些推理,我想知道它们是否正确:

a) 如果 Person至少有一个与 'inverse=false' 的关系(默认),它会先做所有的级联,最后坚持 p1 本身。(因为可能是 FK 身份尚不清楚)

b) 如果 Person 与 'inverse=true' 有所有关系,它可以先保存 p1,然后进行级联。

c) 假设我们有一个 Person<-->Car 一对一的双向关系,并且在两者中我们都有 'inverse=false' 和 'save-update' 级联:

c.1) 会发生什么?这似乎是一个无限循环的情况。

c.2) 正确的解决方案是在 Person 中使用 inverse=true 执行“cascade=save-update”,而在 Car 中不执行 cascade 并且 inverse=false?

也许关于级联顺序决定背后的真实逻辑以及如何涉及“逆”属性的进一步链接可以帮助我。

提前致谢

4

1 回答 1

1

在级联中,在完成一个操作(保存、更新和删除),它决定是否需要对彼此有关系的另一个实体调用其他操作(保存、更新和删除)。

因此对于问题 a 和 b 级联将始终在初始过程完成后检查(并非总是发生) ,如果仍然需要级联,则休眠将进行级联,如果不是则不执行。

对于问题C,一对一和多对一没有反关键字,所以会被忽略。但是如果你想创建正确的双向一对一,你可以在这里看到

于 2013-08-04T04:17:46.037 回答