我想知道当我这样做时会发生什么:
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)正确的解决方案是在使用inverse = true进行'cascade = save-update',而在Car中不做cascade和inverse = false?
也许关于做级联的决定背后的真实逻辑以及如何涉及“反向”属性的进一步链接可以帮助我。
提前致谢
答案 0 :(得分:1)
在级联中,在一次操作后(保存,更新和删除)已完成,它决定是否需要调用其他操作(保存,更新和删除)另一个有彼此关系的实体。
所以对于问题a和b级联将始终检查(并非总是发生)在初始过程完成后,如果仍然需要级联,那么hibernate将执行级联,如果不是,则不执行。< / p>
对于问题C,一对一和多对一没有反向关键字,因此它将被忽略。但是如果你想创建正确的双向一对一,你可以see it here。