只读事务表锁定

时间:2011-11-06 21:27:11

标签: database hibernate jpa locking

我正在使用JPA 2.0,Hibernate和MySQL。 MySQL db的隔离是TRANSACTION_REPEATABLE_READ。我有一组查询,用于在网站上显示数据。其中一些查询必须获取大量行,并且可以通过其他过程在中间修改它们。我是否必须对那些只读查询使用任何类型的锁定(悲观或乐观)以确保结果集是一致的?

通过@Version注释对自动对象版本控制使用乐观锁定是否对只读查询有意义?

我不确定为什么任何人都必须在实体或查询上明确指定LockModeType.OPTIMISTIC。如果对象是版本化的,那么无论如何都会在提交时检查,对吧?

1 个答案:

答案 0 :(得分:1)

如果将选择放在事务中,则TRANSACTION_REPEATABLE_READ隔离级别将阻止更新所选行,直到您选择事务提交为止。但不会阻止插入。

这是一种悲观的锁定方法,适合您的用例。我假设您的select事务是短暂的,因为尝试更新某些选定行的客户端正在等待select事务提交。

带有版本控制的乐观锁定策略在"修改记录"中更有用。用户在某个客户端选择一行时,花费2,3或10分钟查看/修改记录(在用户界面中),然后保存(提交)其修改。通过这种策略,我们不希望其他客户等待第一个客户保存其修改。