Heim  >  Artikel  >  Java  >  Warum erhalte ich im Ruhezustand die Ausnahme „Doppeltes Objekt mit demselben Bezeichner“?

Warum erhalte ich im Ruhezustand die Ausnahme „Doppeltes Objekt mit demselben Bezeichner“?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 22:16:02157Durchsuche

 Why am I getting a

Hibernate-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:

  • Entität A (Rolebean) ist mit Entität B (Userbean) und Entität C (Gruppenbean) verknüpft.
  • Wenn saveOrUpdate für Entität B aufgerufen wird, Hibernate speichert Entität A als Teil der Beziehungen von Entität B.
  • Später, wenn saveOrUpdate für Entität C aufgerufen wird, versucht Hibernate, Entität A erneut zu speichern, jedoch als separate Instanz.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn