Heim >Java >javaLernprogramm >Warum erhalte ich im Ruhezustand die Ausnahme „Doppeltes Objekt mit demselben Bezeichner'?
Problem:
Bei Verwendung von session.saveOrUpdate(e) mit Wenn es sich um ein Objekt handelt, das eine Beziehung zu anderen Entitäten hat, kann eine Ausnahme ausgelöst werden, die darauf hinweist, dass der Sitzung bereits ein anderes Objekt mit demselben Bezeichnerwert zugeordnet wurde.
Erklärung:
Diese Ausnahme tritt auf, wenn Hibernate innerhalb einer einzigen Sitzung mehrere Instanzen derselben Entität mit derselben Kennung erkennt. Hier ist eine vereinfachte Darstellung der Situation:
Lösung:
Die Lösung hängt vom gewünschten Verhalten ab:
1. Pflegen Sie Beziehungen durch Zusammenführen:
Um doppelte Instanzen zu verhindern, verwenden Sie session.merge(e) anstelle von saveOrUpdate. Bei der Zusammenführung wird davon ausgegangen, dass die getrennte Instanz der Entität (in diesem Fall Entität A) an die Sitzung angehängt werden sollte und alle Änderungen in der angehängten Version zusammengeführt werden sollten.
2. Stellen Sie die Konsistenz bei der Zuweisung sicher:
Wenn Sie saveOrUpdate weiterhin verwenden möchten, stellen Sie sicher, dass allen zugehörigen Entitäten dieselbe Instanz der Entität zugewiesen ist. Dies bedeutet, dass beim Hinzufügen von Entität A zu den Beziehungen von Entität B und Entität C dieselbe Instanz von Entität A verwendet werden sollte.
Beispiel:
<code class="java">// Ensuring the same instance of rolebean is assigned to both userbean and groupbean rolebean.setUserbean(userbean); groupbean.getGroups().add(rolebean);</code>
Hinweis:
Der spezifische Fix hängt vom Code ab, der die Zuweisung ausführt. Es ist wichtig sicherzustellen, dass beim Herstellen von Beziehungen dieselbe Instanz der Entität verwendet wird, um das Problem doppelter Objekte zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich im Ruhezustand die Ausnahme „Doppeltes Objekt mit demselben Bezeichner'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!