我在合併時遇到了一些問題。我的更新方法的工作是這樣的:[休眠]將子對象與瞬態對象合併
void update(Parent parent) {
evict(parent);
merge(parent);
}
我的課:
Parent {
Long id;
List<Children> childrens;
@OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY)
@JoinColumn(name="PARENT")
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
List<Children> getChildrens(){...}
@Id
Long getId() {...}
}
Children{
Parent parent;
@ManyToOne(targetEntity = ParentImpl.class, fetch = FetchType.LAZY)
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "PARENT", nullable = false)
Parent getParent(){...}
}
當我創建一個新的父(瞬態)的對象,並添加新的兒童,並試圖更新(驅逐&合併),那麼日誌顯示我這沖刷休眠會議後:
INSERT PARENT //everythings here is ok.
INSERT CHILDREN // but without parent id(id=null)
訂單是好的,但兒童沒有在插入父ID。當父母堅持數據庫時,一切正常,然後孩子總是有一個好的ID。
任何想法我應該怎麼做才能從瞬態對象(從持久確定)獲得id。
Regards KZ。
您是否嘗試先通過session.saveOrUpdate()保存瞬態實例,以便將某個ID附加到實體?你是否在執行子對象插入操作時檢入一個調試器,表明你的實體有一個ID? – fasseg 2010-11-25 23:13:38