Wie lösen org.hibernate.NonUniqueObjectException: ein anderes Objekt mit der gleichen id-Wert war bereits im Zusammenhang mit der session:
Ich bin sparen eine List
durch die Verwendung von hibernate, aber es wirft folgende exception:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
Den code, den ich verwende, ist unten, aber ich weiß nicht, warum wirft er die exception:
public void save(List<UserItem> list)
{
//getHibernateTemplate().saveOrUpdateAll(list);
//getHibernateTemplate().deleteAll(list);
sessFactory = getHibernateTemplate().getSessionFactory();
Session session = sessFactory.getCurrentSession();
for (UserItem bean : list) {
session.saveOrUpdate(bean);
}
}
Was ist der richtige Weg, um zu sparen die List
?
- Ich habe aktualisiert Ihre post, aber ich denke immer noch, es wäre hilfreich für andere, wenn Sie die folgenden Angaben enthalten: 1), Die spezifische Linie wirft die Ausnahme? (Schritt durch den code, um herauszufinden, wenn nötig.) 2) Haben Sie Lesen die javadocs für die Methode werfen? Unter welchen Umständen wird es behaupten zu werfen, wenn überhaupt? Was war unklar? 3) Welche anderen Dinge haben Sie versucht, die möglicherweise für mehr Infos??? Ist ein MCVE machbar, so dass andere reproduzieren können? Wenn ja, post.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass ein Objekt mit dieser id existiert bereits in der Sitzung mithilfe von merge wird alle Ihre Probleme zu beheben, aber Sie sollten wirklich look in die Unterschiede. Einfach kopieren und es funktioniert.
Hier ist eine gute Quelle für weitere Informationen über die hibernate-Persistenz-bezogene Methoden
Was sind die Unterschiede zwischen den verschiedenen Speichermethoden im Ruhezustand?
Der wichtigste Grund oder die Ursache dieses Fehlers ist, in deiner Liste gibt es Objekte mit dem gleichen Primärschlüssel haben, bedeutet es, dass zwei Objekt mit dem gleichen Primärschlüssel, aber Sie sind nicht die gleichen Objekt-Instanz.
Ich würde vorschlagen, Sie Durchlaufen Ihre Liste und drucken Sie den primary key-Wert und finden Sie heraus, ob es einen Objekt, das die gleichen Primärschlüsselwert. Setzen Sie einfach die Funktion drucken in Ihrem for-Schleife zum drucken der primary key-Wert für jedes Objekt vor dem Aufruf
session.saveOrUpdate(bean);
Linie.