【问题标题】:How to lock whole entity (table) in JPA entity manager如何在 JPA 实体管理器中锁定整个实体(表)
【发布时间】:2014-07-16 04:01:49
【问题描述】:

我有一个表,我从中计算两个日期之间的当前行数,并在同一个表的“要插入”行中使用结果值。

我遇到的问题是当两个并发请求来自 A1 和 A2 并且想要同时存储新行时(经过上面的计算),两者都有相同的结果,比如 10 行。即使 A1 应该有 10,而 A2 应该有 11。

两个事务冲突。所以我需要锁表。我知道锁功能就是,

aRepository.lock(Object);

但问题是这只会锁定一行,我想在计算总行数时锁定整个表(实体)。

请指教。

【问题讨论】:

  • 你找到解决方案了吗?
  • 很遗憾没有。

标签: hibernate jpa locking entity


【解决方案1】:

据我所知,您无法使用 JPA 锁定整个表。 但当然,您可以使用本机查询来做到这一点。 为什么不在实体中使用这样的序列:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

您将能够并行工作,而不是一个接一个地运行。

如果你真的坚持要一个接一个,你也可以有一个一列一排的小桌子。在那里你可以使用

aRepository.lock(Object);

但我不建议这样做。

【讨论】:

    【解决方案2】:

    使用entityManager.find(yourClass.class , your-primary-key, LOCK_MODE) 方法。这将锁定整个表。

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 2016-02-10
      • 2019-07-09
      • 2015-06-22
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多