2013-08-04 65 views
0

我想知道当我这样做到底发生了什么:上保存更新的级联顺序级联和反持久性图形

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

的条款。

这里有一些必备的推理,我想知道,如果他们是正确的:

a)如果人体有一定至少一个与“逆= FALSE(默认)的关系,它会首先做所有的级联,最后坚持p1本身。 (因为它可能是FK身份尚未知道)

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

c)假设我们有一个Person < - >汽车一到一个双向的关系,并在这两个,我们有“反= FALSE”和“保存更新”级联:

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

C.2)正确的解决方案是人做“级联=保存更新”与逆= true,并且在车没有做级联和逆=假?

这样做级联的顺序以及如何“逆”财产参与可以帮助我的决定背后的真正逻辑可能的进一步联系。

在此先感谢

回答

1

在级联,一个操作(保存,更新和删除)完成,它决定是否需要在另一个实体调用其他操作(保存,更新和删除)后它们之间有着相互的关系。

因此对于问题A和B级联总会检查(并不总是发生)初始过程完成后,如果仍然需要级联,则Hibernate会做级联,如果没有它不执行。

的问题C,一到一个和many-to-one不具有逆关键字,所以它会被忽略。但是,如果你想创建正确的双向一对一,你可以see it here

+0

如果A具有FK到B和我做A.Save()?如果首先保存A,Hibernate如何知道B键,它必须允许空值?...我怎么能避免这种情况? –

+0

你问关于级联和反向工作。这两件事独立工作。级联在保存之后,反转仍然可以不级联地工作。 [查看此示例](http://www.mkyong.com/hibernate/inverse-true-example-and-explanation/) – Angga

+0

但“逆”工作不可能在保存完成的。它在瀑布之前或之后很重要。 –