如何知道哪个是hibernate生成的id(循环依赖)

时间:2014-07-09 17:02:19

标签: java hibernate generator circular-dependency

我创建了一个Object A {id:long(AutIncrement),name:String},我将使用hibernate保存Outupdate。

我想知道,在A保存之前,这将是生成的Id。我需要它,因为我需要在A中设置依赖于对象B的属性的属性,但是我还有B中的属性,具体取决于对象A.

这是一种循环依赖。当填充B时我需要A的id,当填充A时,我需要一个生成的B属性。

有没有办法知道保存A之前的ID,

提前致谢 RGD

2 个答案:

答案 0 :(得分:0)

你无法访问id,直到刷新时间之后,你可以添加级联插入/更新到关系,但这可能会导致地狱,特别是当你有循环依赖时。 我会做@kdgregory所说的,改变你的表结构。

答案 1 :(得分:0)

正如kdgregory所说,一般的答案是不可能。这种循环依赖通常是数据库结构设计问题的标志。

话虽如此,如果你真的想这样做,你可以手动在你的数据库中声明一个序列,比如说hibernate主键生成策略是assigned(这已经足够了)不包括任何发电机)。然后在你的应用程序中,当你创建一个新的A时,你首先从序列中获取它的id,把它作为你的对象,根据它做你需要的对象并最终坚持它。

但是要小心,作为持久B的时间,A的ID将是已知的,但显然数据库中不存在A.