【发布时间】:2014-01-02 11:53:38
【问题描述】:
我有一个汇总成功计数的批处理系统。许多服务器进行聚合,所有服务器同时更新表中的单行。我像这样使用休眠执行准备好的语句
SQL_UPDATE = "UPDATE STATS.COUNTS SET SUCCESSCOUNT = SUCCESSCOUNT + ? WHERE ID = ?"
update = session.connection().prepareStatement(SQL_UPDATE);
update.setLong(1, data.getSuccessCount());
update.setLong(2, data.getBatchId());
update.execute();
并发问题很少,因此决定使用悲观锁定,因为冲突的可能性非常高。在休眠中使用这样的准备好的语句时如何执行悲观锁定。
【问题讨论】:
-
您是通过本机 SQL 而不是通过 Hibernate 执行此操作的,因此它无法帮助您。如果您在事务中执行查询,请先执行
SELECT...FOR UPDATE,它将根据需要锁定。 -
@BoristheSpider 以上是在事务本身中执行的。通过 select...for update 你的意思是先检索对象然后进行更新?如果我执行 select...for update 不是两个查询命中 db(1 用于选择和 1 用于更新)而不是 1 在这种情况下?
标签: java mysql hibernate locking pessimistic-locking