2010-04-07 68 views
0

中獲取級聯中子級的ID =「全部」關係,同時將它添加到集合中我有兩個實體「Parent」和「Child」,它們通過雙向one-to-與級聯屬性設置爲「全部」的許多關係。 使用下面的代碼添加子對象到父兒童收集,我不能讓孩子持久化的ID,直到我提交的事務:在休眠

Parent p = (Parent) session.load(Parent.class, pid); 
Child c = new Child(); 
p.addChild(c); 
// "c" hasn't an ID (is always zero) 

然而,當我通過明確堅持一個子實體調用session.save()方法,在創建ID,並立即設置,即使該交易尚未承諾:

Child c = new Child(); 
session.save(c); 
// "c" has an ID 

有沒有辦法讓孩子實體的ID沒有立即調用session.save()方法?

謝謝

回答

1

這實際上取決於您使用的ID方案。

如果您使用自動增量字段(例如MySQL,SQL Server),則只有實體保存爲時纔會創建ID。

如果您使用序列(例如Oracle),當實體爲持續時,將創建ID。

我假設你有一個自動增量字段,在這種情況下答案是:不,如果不堅持,你就不能得到一個ID。這就是說,你不應該在這個ID大部分時候需要。與其他實體的關係是隱式處理的。那麼我假設你想要某種URL參數或表單字段的ID?無論如何,是的,你需要保存它。