解決org.hibernate.NonUniqueObjectException的問題

不知道是否是以前處理懶加載的問題對session工廠進行了處理,致使了以前沒有問題的地方出現了錯誤.前端

當修改班級操做時出現了錯誤spring

前端錯誤信息session

後臺處理以及報錯信息app

16:37:36,034 ERROR ExceptionMappingInterceptor:38 - a different object with the same identifier value was already associated with the session: [cn.peiying.domain.Classes#128]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [cn.peiying.domain.Classes#128]
org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [cn.peiying.domain.Classes#128]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [cn.peiying.domain.Classes#128]dom

出現這個異常的緣由:ide

Hibernate 增刪改在 session 中已存在相同 OID(主鍵) 的對象。好比,先刪除,後插入。this

這就會報上面的錯誤。hibernate

原來是由於在Hibernate中同一個session內,若是已經有一個對象已是持久化狀態(load進來等),如今構造一個新的PO,和前一個持久化對象擁有相同的持久化標識(identifier),在update的時候,就會拋這個錯誤。對象

解決方法blog

1.不要從新new一個對象,使用load的對象對他進行更改值。
2.若是是hibernate3以上,能夠使用session.merge()方法
3.把session中同標識的對象移出(session.evict(user1)),使他成爲脫管的狀態,而後user2就能夠update了

this.getHibernateTemplate().getSessionFactory().getCurrentSession().clear();加上這行代碼清除session後,執行經過
相關文章
相關標籤/搜索