我的应用程序是多线程的,所以当使用自然键作为对象时,即使我检查具有所述自然键的对象是否已经存在,总是有可能在我检查其存在之后创建该对象,从而导致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();
}
答案 0 :(得分:0)
使用hibernate中的版本,因为merge使用此字段来确定最近的记录。