0

我正在使用 Spring 3、休眠等。我正在尝试更新表中的计数器 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)
4

1 回答 1

0

如果您只想更新计数器,为什么要复制对象?您不能将两个具有相同 ID(实体中的 @Id)的不同对象与休眠会话关联。我猜您正在使用您设置的属性之一MySN作为 ID。我建议使用代理 ID(afaik 这也是 hibernate 文档中推荐的),它可以由 db-sequence 分配(如果您使用的是 oracle DB),如果您必须复制对象,请离开这个代理ID null,你就可以保存它。

于 2012-07-25T18:05:44.823 回答