我有一个使用hibernate的更新语句,它将计数增加一个值。我正在使用的声明就是这个
UPDATE_STMT="UPDATE STATS.PROCESSED SET COUNT = COUNT + ? WHERE ID = ?"
我正在准备声明并以这种方式执行它。以下所有代码均采用transaction/commit/rollback
模式。
update = session.connection().prepareStatement(UPDATE_STMT);
update.setLong(1, data.getCounter());
update.setLong(2, data.TransId());
update.execute();
但看起来有竞争条件且数据库没有正确更新。更新是从多个应用程序服务器执行的。我想知道使用上述语句进行更新是否是一种安全的方法,或者是否有更好的方法来处理这种情况。