为什么session.get(...)解决了org.hibernate.NonUniqueObjectException?

时间:2015-08-18 21:16:06

标签: hibernate persistent hibernate-session

我正在使用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(...)的对象,则不再发生该异常。为什么?感谢。

0 个答案:

没有答案