2011-06-29 1 views
3

データベースからオブジェクトを削除するときにエラーが発生しました。エラーは次のとおりです。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 

は、なぜそれが起こっている:私は列に表示され、このオブジェクトは、一意であるデータベースで

ありがとうございます!

答えて

4

NonUniqueObjectExceptionは、セッションに関連付けようとしているものと同じID(主キー)を持つセッションにすでに関連付けられているオブジェクトがある場合にスローされます。

これは、一般的に削除method自体とは何の関係もありませんし、削除を削除が呼び出された場所を確認してください

と呼ばれているコンテキストで行うことがより多くを持っています。削除が呼び出された場所に重複している可能性のあるオブジェクトがないかチェックしてください。

This questionも役に立ちます。

+1

どうすれば問題を解決できますか? session.close()、session = null;を試してみました。新しいセッションsession.clear()を作成しますが、動作しません。 –

+0

対処方法は、状況によって異なります。オブジェクト(UIレイヤーから)を持っていて、そのオブジェクトでPKを検索してから削除しようとすると、そのオブジェクトに対して直接削除を呼び出すことができます。 'session.flush()'を試してみてください。両方のオブジェクトをマージしてみることができます(それが識別されている場合)。このソリューションは、文脈に完全に依存します。 – Nivas

0

このエラーは、同じセッションで同じオブジェクトを読み込んだことを示します(ここでは、同じことは両方のオブジェクトが同じ識別子値を持つことを意味します)。データベースの一意性とは何の関係もありません。

関連する問題