不知道是否是以前處理懶加載的問題對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後,執行經過