saveOrUpdate使用Spring 3 Hibernate时出现数据库错误

时间:2012-07-25 17:52:41

标签: spring hibernate spring-mvc

我正在使用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)

1 个答案:

答案 0 :(得分:0)

如果您只想更新计数器,为什么要复制对象?您不能拥有两个具有相同ID的对象(您的实体中的@Id)与hibernate会话相关联。我猜您正在使用MySN上设置的其中一个属性作为ID。我建议使用代理ID(并且afaik这是hibernate文档中推荐的内容),例如可以是由db-sequence分配(如果你正在使用oracle DB),如果你必须复制该对象,只需留下这个代理id [{1}},你就可以保存它。