首頁  >  文章  >  Java  >  為什麼 Hibernate 在保存具有嵌套集合的使用者 bean 時會拋出「具有相同標識符值的不同物件已與會話關聯」異常,以及如何解決

為什麼 Hibernate 在保存具有嵌套集合的使用者 bean 時會拋出「具有相同標識符值的不同物件已與會話關聯」異常,以及如何解決

Susan Sarandon
Susan Sarandon原創
2024-10-30 16:08:02286瀏覽

Why does Hibernate throw the

Hibernate:使用重複物件識別碼進行異常處理

錯誤訊息「Hibernate:具有相同識別碼值的不同物件已與當檔Hibernate 遇到具有已與目前會話關聯的現有識別碼的物件時,就會發生「session」。 🎜>

在提供的程式碼中:

<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>
嘗試時拋出異常保存或更新用戶bean。 。 :

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

使用

session.merge()
    而不是
  • session.saveOrUpdate()**:這將告訴Hibernate 該物件已經被管理並且應該如有必要,請更新,而不是重新儲存。 ) 從資料庫檢索物件。

以上是為什麼 Hibernate 在保存具有嵌套集合的使用者 bean 時會拋出「具有相同標識符值的不同物件已與會話關聯」異常,以及如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn