org.hibernate.NonUniqueObjectException

У меня ошибка, когда я хочу удалить объект из базы данных. Ошибка:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.cartif.database.ApplicationField#asd]

Чтобы удалить объект, я делаю:

public static void delete(Object o){
    if(session == null) createSession();
    Transaction tx = session.beginTransaction();
    tx.begin();
    session.delete(o);
    tx.commit();
}

Когда я вызываю этот метод с объектом, я получаю сообщение об ошибке. Если я отлаживаю приложение, возникает исключение в tx.begin(); линия.

В базе данных этот объект уникален, как показано в столбцах:

         name                   deviceid
         "asd"                     1
"ElectricalConsumption"            1
       "Energy"                    1

Почему это произошло?

Заранее спасибо!


person Jose Hdez    schedule 29.06.2011    source источник


Ответы (2)


NonUniqueObjectException возникает, когда с сеансом уже связан объект с тем же идентификатором (первичный ключ), что и тот, который вы пытаетесь связать с сеансом.

Как правило, это не имеет ничего общего с самим удалением method, а скорее с контекстом, в котором вызывается удаление.

Проверьте место, где вызывается удаление. Проверьте наличие возможных повторяющихся объектов в том месте, где вызывается удаление.

Этот вопрос также может помочь.

person Nivas    schedule 29.06.2011
comment
Но как я могу решить проблему? Я пробовал с session.close(), session = null; и создайте новый сеанс, session.clear(), но он не работает. - person Jose Hdez; 29.06.2011
comment
Что делать, зависит от вашей ситуации. Если у вас есть объект (скажем, из слоя пользовательского интерфейса) и вы выполняете поиск с помощью PK, а затем пытаетесь его удалить, вы можете вызвать удаление непосредственно на нем. Вы также можете попробовать session.flush(). Вы можете попробовать объединить оба объекта (если вы их идентифицировали). Решение полностью зависит от контекста. - person Nivas; 01.07.2011

Эта ошибка указывает на то, что вы загрузили один и тот же объект (здесь подразумевается, что оба объекта имеют одинаковое значение идентификатора) более одного раза в одном и том же сеансе. Это не имеет ничего общего с уникальностью в базе данных.

person Sriram    schedule 29.06.2011