我需要确保对实体的更新不会屈服于网络错误等间歇性问题。
通过调用getSession().update(object);
来保存实体,其中getSession()
返回当前的Hibernate会话。
我是否需要重试update
语句?或者Hibernate提供某种保证吗?
答案 0 :(得分:2)
如果对象未更新,您可以将代码包含在try-catch块中,当您在catch块中处理异常时,它将回滚事务。喜欢以下
Session sess = factory.openSession();
Transaction tx;
try {
tx = sess.beginTransaction();
sess.update(someobject);
tx.commit();
}
catch (Exception e) {
if (tx!=null)
tx.rollback();
throw e;
}
finally {
sess.close();
}
答案 1 :(得分:1)
您可以将其包围在try-catch块中,并在发生故障时采取补偿措施。例如,您可以将失败写入消息队列,以便稍后处理。