我已经阅读了Java Persistence 2.0中的文章Locking and Concurrency,并运行了示例应用程序.但我仍然无法意识到PESSIMISTIC_READ和PESSIMISTIC_WRITE之间的区别.我试图修改代码,并且使用PESSIMISTIC_READ和PESSIMISTIC_WRITE的代码将具有与"for update"调用sql相同的结果.
假设我正在做这样的事情(来自Active Record Querying指南)
Item.transaction do
i = Item.first(:lock => true)
i.name = 'Jones'
i.save
end
Run Code Online (Sandbox Code Playgroud)
是否在交易结束时自动释放锁定?我查看了Active Query指南和ActiveRecord :: Locking :: Pessimistic文档,但无法找到明确说明锁定释放位置的位置.
如果我在MS SQL Server中选择一行进行更新,并希望将其锁定,直到我更新或取消,哪个选项更好: -
1)使用像UPDLOCK这样的查询提示2)对事务使用REPEATABLE READ隔离级别3)任何其他选项.
谢谢,泽.
我们有一个系统,我们必须在一个实体中使用悲观锁定.我们正在使用hibernate,所以我们使用LockMode.UPGRADE.但是,它没有锁定.
autoCommit = false参数.谢谢,
我正在使用JPA 2.0的EclipseLink实现,它允许悲观锁定.我知道如何锁定实体,但如何释放锁?起初我认为这一切都在事务中处理(换句话说,实体被锁定直到你提交事务),但似乎并非如此.
我尝试了一个快速谷歌搜索(似乎这应该是非常明显的),但我还没有找到任何东西......
locking ×5
pessimistic ×5
java ×2
jpa ×2
eclipselink ×1
hibernate ×1
mysql ×1
sql-server ×1
transactions ×1