天天看點

解決a different object with the same identifier value was already associated with the session錯誤

解決a different object with the same identifier value was already associated with the session錯誤

首先我的問題是沒有給主鍵指派,如下面代碼,dc是我new出來的對象,一開始我并沒有加這一行代碼dc.setDataCenterID(dcList.get(0).getDataCenterID());  ,因為我并不想修改它,但為什麼會出   different object with the same identifier value was already associated with the session錯誤(在hibernate中同一個session裡面有了兩個相同辨別但是是不同實體),我還搞不太清楚,個人猜想是hibernate架構中的一級緩存問題,具體原因還待研究

//T_DC_DataCenterBaseInfo_KeyUtil.dataCenterID = dataCenter.getDataCenterID();

dc.setDataCenterID(dcList.get(0).getDataCenterID());

dc.setDataCenterName(dataCenter.getDataCenterName());

dc.setDataCenterType(dataCenter.getDataCenterType());

dc.setDataCenterManager(dataCenter.getDataCenterManager());

dc.setDataCenterDesc(dataCenter.getDataCenterDesc());

dc.setDataCenterContact(dataCenter.getDataCenterContact());

dc.setDataCenterTel(dataCenter.getDataCenterTel());

dao.updateEntity(em, dc);

return dc;

--------------------------------------------------------

Hibernate 疑難異常及處理

1、a different object with the same identifier value was already associated with the session。

  錯誤原因:在hibernate中同一個session裡面有了兩個相同辨別但是是不同實體。

  解決方法一:session.clean()

  PS:如果在clean操作後面又進行了saveOrUpdate(object)等改變資料狀态的操作,有可能會報出"Found two representations of same collection"異常。

  解決方法二:session.refresh(object)

  PS:當object不是資料庫中已有資料的對象的時候,不能使用session.refresh(object)因為該方法是從hibernate的session中去重新取object,如果session中沒有這個對象,則會報錯是以當你使用saveOrUpdate(object)之前還需要判斷一下。

  解決方法三:session.merge(object)

  PS:Hibernate裡面自帶的方法,推薦使用。

2、Found two representations of same collection

  錯誤原因:見1。

  解決方法:session.merge(object)

以上兩中異常經常出現在一對多映射和多對多映射中

繼續閱讀