2012-07-25 35 views
0

我正在使用Spring 3,休眠等我試圖更新我的表中的計數器列..我做了選擇該行,將數據從行復制到新對象,然後嘗試做一個saveOrUpdate新對象,我得到以下錯誤:數據庫錯誤,同時使用Spring 3 saveOrUpdate休眠

我的源代碼:

public void updateSerialNumber(SerialNumber sn) { 
     SerialNumber MySN = new SerialNumber(); 
     log.debug("sn:" + sn.toString()); 
     MySN.setName(sn.getName()); 
     MySN.setValue(sn.getValue()); 
     MySN.setSerialNumberId(sn.getSerialNumberId()); 
     log.debug("MySN:" + MySN.toString()); 
     sessionFactory.getCurrentSession().saveOrUpdate(MySN);    
} 

我的錯誤:

2012-07-25 13:46:30,725 [http-8080-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Could not complete request 
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.uftwf.model.SerialNumber#CERT] 
    at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) 

回答

0

,如果你只是想更新櫃檯 你爲什麼要複製對象?你不能有兩個不同的對象與你的實體中的id相同(@Id)與hibernate會話相關聯。我想你正在使用MySN上的一個屬性作爲ID。我建議使用代理ID(並且afaik這是als在hibernate文檔中推薦的),可以是例如由db序列分配(如果您使用的是oracle數據庫),並且如果您必須複製該對象,則只需保留此代理ID null,然後您就可以保存該代理。

+0

我同意你的看法,但是我擔心,因爲他正在使用saveorUpdate,所以不會發生該問題。親愛的,你可能想發佈你的hibernate映射文件 – TimeToCodeTheRoad 2012-07-25 23:35:28