使用Session.merge时为什么会出现StaleObjectStateException

时间:2013-09-15 08:07:10

标签: hibernate

我的应用程序是多线程的,所以当使用自然键作为对象时,即使我检查具有所述自然键的对象是否已经存在,总是有可能在我检查其存在之后创建该对象,从而导致StaleObjectStateException当我保存我的新物体时。

我认为这可以使用Session.merge()来解决,但它仍然给我上述错误

我已经尝试过对此进行阅读,但还没有找到明确澄清这一点的内容,大多数示例都会讨论合并检查数据库,但总是在同一函数中显示一个分离的对象实例,这会使问题变得混乱。

try
{
      session = HibernateUtil.beginTransaction();
      Widget widget = new Widget();
      widget.setData(data);
      widget.setKeyFromData(data);

      //Look in db for widget with same id and return it merged with data in widget or
      /create new object ?
      widget = session.merge(widget);

      session.close();
}
catch(StaleObjectException soe)
{
      e.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

使用hibernate中的版本,因为merge使用此字段来确定最近的记录。