我正面临着Hibernate的一些问题。我们需要用它的子节点保存一个对象。每个孩子都有一个复合主键。密钥的一个属性将由触发器插入。在调用saveOrUpdate(Object)
之前,将从程序中设置另一个属性。
但是我们无法保存对象。 Hibernate抛出异常Same identifier is already exists in the session
。
我尝试了session.clear()
,但我得到了同样的例外。当我尝试session.merge()
时,只保存了最后一个孩子,其他孩子被忽略了。
答案 0 :(得分:1)
如果您在同一个Hibernate Session中不需要保存对象,则可以在使用Session.evict()
保存后立即将其分离:
// children is the collection of detached children, ready to save
for (Child child : children){
session.save(child);
session.evict(child);
}
或者,Hibernate论坛中的这个条目可能会有所帮助:Before Insert Trigger and ID generator。有AbstractPostInsertGenerator
的实现,您可以集成以满足您的需求。