我在合并时遇到了一些问题。我的更新方法的工作是这样的:[休眠]将子对象与瞬态对象合并
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