首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >悲观锁不起作用

悲观锁不起作用
EN

Stack Overflow用户
提问于 2013-09-12 10:47:33
回答 2查看 1.1K关注 0票数 2

我正在用JPA2.1开发一个应用程序。我有后续的麻烦。

我试图用这样的方式锁定一个实体:

代码语言:javascript
运行
复制
Book book = em.find(Book.class, 12);
em.lock(book, LockModeType.PESSIMISTIC_WRITE);

但是,如果尝试使用id=12从另一个窗口浏览器或客户端访问实体,系统就不会抛出PessimisticLockException?

我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2013-09-12 11:21:20

锁在事务的生存期内是有效的,但肯定不会跨越多个请求响应循环(除非您已经将实体管理器和事务管理器配置为管理长时间事务)。

事务必须是一个短期活动对象(出于性能原因)。

乐观写锁意味着book不会被lock指令和事务结束之间的任何其他线程修改。当然,书中的对象本身也可能活得更长。

票数 2
EN

Stack Overflow用户

发布于 2013-09-12 11:24:03

我想,在另一个窗口/浏览器中,您会尝试同样的方法:获取一个PESSIMISTIC_WRITE锁。

您所遇到的问题是,当方法返回时(事务结束时),锁就会释放,这意味着当您打开第二个浏览器/窗口时,就没有锁了。

您可能应该解释一下您想要解决/测试的问题/场景。

对于一般情况:

另一个可能的原因可能是数据库表不支持行级锁定。例如,在MySql中,只有InnoDB存储引擎支持"SELECT * For“( PESSIMISTIC_WRITE锁被转换为该更新)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18762154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档