2012-07-25 54 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