繁体   English   中英

休眠中的表级锁定

[英]Table level Lock in Hibernate

我使用的是Hibernate版本4。批处理过程中出现问题。 我们的系统如下

  1. 选择处于“ PENDING”状态的记录集
  2. 立即更新为“进行中”状态
  3. 处理并更新为“已完成”状态

当我们有两个服务器并同时执行时,我们担心会出现并发问题。 因此,我们想在前两个步骤中实现DB Lock。 我们使用了query.setLockOptions() ,但似乎不起作用。 在完成选择和更新之前,还有其他任何东西具有表级别锁定或行级别锁定。 两者都在同一会话中。

JDBC中的选项有LOCK TABLE <TABLE_NAME> WRITE 但是我们如何在休眠中实现,或者有可能在休眠中实现select..for更新?

“SELECT ... FOR UPDATE”通过支持在休眠LockMode.UPGRADE ,你可以设置,例如,一个NamedQuery

但是使用应用程序/手动表行锁定有几个缺点(尤其是当数据库连接在事务进行中途中断时),而更新过程可以不用它:

  • 开始交易。
  • 更新表集state ='PENDING',server_id = 1其中state ='IN PROGRESS';
  • 提交交易
  • 从其中state ='PENDING'和server_id = 1的表中选择;
  • [过程记录]

每个服务器必须有一个唯一的编号才能正常工作,但是它不会出错,您可以让DBMS执行应该做的擅长的工作:隔离(请参阅ACID )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM