当前位置: 首页 > 知识库问答 >
问题:

%2个服务无法获取同一实体上的PESSIMISTIC_READ锁

邬良才
2023-03-14
ConfigEntity configEntity = this.getEntityById(1); // successfully get the entity
this.entityManager.lock(configEntity, LockModeType.PESSIMISTIC_READ);

调用了ConfigEJB的2个实例。第一个实例可以成功获取锁。但是,第二个实例无法获得锁,并且被阻塞,直到第一个实例完成它的事务(我预计它会成功获得锁)。

有没有人遇到过这个问题?或者这是JPA的预期行为?如何让服务正确获得PESSIMISTIC_READ锁?

共有1个答案

卜盛
2023-03-14

未见参考文献,但Pro JPA2说:

一些数据库支持锁定机制,以获得可重复的读隔离,而无需获取写锁。PESSIMISTIC_READ模式可用于在预期不写入实体时悲观地实现可重复读取语义。这种情况不会经常遇到,再加上提供程序允许使用悲观的写锁来实现它,我们认为这种模式不是一种容易获得和常用的模式。

因此,似乎您的数据库提供程序将PESSIMISTIC_READ替换为PESSIMISTIC_WRITE

 类似资料:
  • 问题内容: 假设我有一个包含200列的表格,其中大多数从未使用过。 我将SmallEntity映射到经常使用的10列。我在与其他实体的关联中使用它。它加载速度快,消耗很少的内存,让我很高兴。 但是有时我需要显示200列。我想在200列上映射BigEntity类。它没有绑定到其他实体,也没有关联。 问题:您有这样做的经验吗?您是否知道Hibernate可能会遇到的任何麻烦,例如在一级缓存,脏检查和实

  • 我正在尝试使用以下Zuul自动配置(Spring Boot)将Zuul配置为Eureka: 但是,当通过Zuul打电话给客户服务得到以下例外: 我用网络控制台检查了客户服务的尤里卡,我发现一个客户服务的实例在那里注册正确。 有人能帮我知道出了什么问题吗?

  • 我将JPA与Hibernate和QueryDSL(v.4.0.5)一起使用。我拥有以下实体: 如何找到与给定标记集匹配的所有文章?我想我应该从以下几点开始: 其中,ce应为集合表达式。很明显,我不知道如何设置这个。 有什么解决方案吗?

  • 我使用此代码获取位置: 清单中定义了访问位置和访问位置权限。 双网

  • 问题内容: 我正在寻找一种聪明且易于理解的方法来使用获取持久化实体的ID 。ID是。 可以想到以下解决方案: 没有使用策略。这要求在保留之前先查找一个免费的id,然后将其放入要保留的实体中:麻烦,但可以。 有策略。持久性提供程序将负责生成id。这看起来更聪明,但是如何获取ID? 请参阅下面的解决方案2 这会显示一个空ID! 有什么建议?我正在使用MySql,EclipseLink,但需要一个可移植

  • 问题内容: 以下是我的代码在这里,我使用多个列表从数据库中获取数据。从hql查询中获取数据时显示异常。 Pojo课 hmb.xml文件 HQL查询 我正在尝试以下查询从数据库中获取数据,但这显示了 如何解决此问题 问题答案: 这是一个非常常见的问题,所以我决定将答案变成一篇文章。 Hibernate不允许获取一个以上的包,因为这会生成Cartesian。 现在,您会发现很多答案,博客文章,视频或其