我使用的是Hibernate版本4.我们在批处理过程中遇到了问题。我们的系统如下工作
当我们有两个服务器并同时执行时,我们担心会出现并发问题。所以我们想在前两步实现DB Lock。我们使用了query.setLockOptions()
,但似乎无效。是否还有其他任何表级锁或行级锁,直到它完成选择和更新。两者都处于相同的会话中。
我们在JDBC中有LOCK TABLE <TABLE_NAME> WRITE
的选项。但是我们如何在hibernate中实现,还是可以在hibernate中实现select..for update?
答案 0 :(得分:3)
“选择...进行更新”在Hibernate中通过您可以设置的LockMode.UPGRADE支持,例如NamedQuery。
但是使用应用程序/手动表行锁定有几个缺点(特别是当数据库连接在事务中途中断时),并且更新过程可以在没有它的情况下执行:
每个服务器必须有一个唯一的编号才能工作,但它不会出错,你让DBMS做了它应该擅长的事情:隔离(见ACID)。