我正在使用Hibernate 4,Struts2来尝试删除一个实体,抛出了以下异常:
org.hibernate.NonUniqueObjectException: a different object With the same identifier value was Already Associated With the session
我正在阅读,我认为我理解了这个问题,实际上这个例外是非常具有描述性的;在会话中有多个具有相同标识符的对象,这是有问题的,因为Hibernate在给定主题上执行事务,并且在某些时候来自我的两个对象的信息将不一致。我认为hibernate说“嘿,我在会话中有一个带有这个ID的对象,但不是我给你的对象。”
我检查了我的代码并理解了这个问题,然而,在我读到的一篇文章中,在尝试删除之前获取对象解决了问题,而且确实如此。我不明白为什么要解决问题,所以我想我还没有理解异常的原因。
我认为session.get(...)返回之前提取的对象,但我不确定。
方法是:
public void eliminarElemento(Elemento elemento) {
try {
session.beginTransaction();
//Elemento elementoPersistido = (Elemento) session.get(Elemento.class, elemento.getId());
session.delete(elemento);
session.getTransaction().commit();
} catch (HibernateException he) {
he.printStackTrace();
session.getTransaction().rollback();
throw he;
}
}
如果我取消注释该行并尝试删除返回Session.get(...)的对象,则不再发生该异常。为什么?感谢。