我正在使用Spring 3,hibernate等。我正在尝试更新我的表中的计数器col。我选择行,将行中的数据复制到新对象然后尝试执行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 :(得分:0)
如果您只想更新计数器,为什么要复制对象?您不能拥有两个具有相同ID的对象(您的实体中的@Id)与hibernate会话相关联。我猜您正在使用MySN
上设置的其中一个属性作为ID。我建议使用代理ID(并且afaik这是hibernate文档中推荐的内容),例如可以是由db-sequence分配(如果你正在使用oracle DB),如果你必须复制该对象,只需留下这个代理id [{1}},你就可以保存它。