我的应用程序是多线程的,因此当我使用自然键作为对象时,即使我检查具有所述自然键的对象是否已经存在,也总是有可能在我检查它的存在之后创建对象,当我保存时导致 StaleObjectStateException我的新对象。
我认为这可以使用 Session.merge() 解决,但它仍然给我上述错误
我已经尝试阅读此内容,但还没有找到可以清楚地阐明这一点的内容,大多数示例都在讨论合并检查数据库,但总是在同一函数中显示对象的分离实例,从而混淆了这个问题。
IE
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();
}