Hibernate: Ausnahmebehandlung mit doppelten Objektbezeichnern
Die Fehlermeldung „Ruhezustand: anderes Objekt mit demselben Bezeichnerwert wurde bereits mit dem verknüpft „Sitzung“ tritt auf, wenn Hibernate auf ein Objekt mit einer vorhandenen Kennung trifft, die bereits mit der aktuellen Sitzung verknüpft ist. Dies kann auftreten, wenn versucht wird, ein Objekt zu speichern oder zu aktualisieren, das bereits in der Sitzung vorhanden ist, was zu einem Konflikt führt.
Im bereitgestellten Code:
<code class="java">public E save(E e) { Session session = null; try { session = sessionFactory.openSession(); log.debug("session="+session.hashCode()+" save "+e); session.saveOrUpdate(e); //here throws exception session.flush(); } catch (Exception e1) { log.err("Cannot open hibernate session "+ e1.getMessage()+" cause : "+e1.getCause()); e1.printStackTrace(); } finally { if ( session != null ) session.close(); session = null;} return e ; }</code>
Beim Versuch wird die Ausnahme ausgelöst um eine Benutzer-Bean zu speichern oder zu aktualisieren. Die Ursache des Problems scheint darin zu liegen, dass die Benutzer-Bean eine Liste von Gruppen-Beans enthält, die wiederum eine Liste von Rollen haben. Beim Speichern des Benutzer-Beans versucht Hibernate, die Rollen zweimal zu speichern: einmal als Teil der Gruppen-Beans und erneut als Teil der Rollenliste des Benutzer-Beans.
userbean#1 |---|-----------***userbean.groups | | groupbean#1 | | groupbean.roles | | rolebean#1 # save relebean#1 the first time | | ---done rolebean#1 | | ------done all rolebeans of group.roles | | ---done groupbean#1 | |-----------done all groupbeans of userbean.groups |---|-----------***userbean.roles | rolebean#1 # save rolebean#1 the second time, and throws exception here! | ----done rolebean#1 | ..... |-----------done all rolebeans of userbean.roles
Um dieses Problem zu beheben, ziehen Sie die folgenden Ansätze in Betracht :
Das obige ist der detaillierte Inhalt vonWarum wirft Hibernate beim Speichern einer Benutzer-Bean mit verschachtelten Sammlungen die Ausnahme „Anderes Objekt mit demselben Bezeichnerwert war bereits mit der Sitzung verknüpft' aus und wie ca. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!