如何在JPA实体管理器中锁定整个实体(表)

Man*_*een 5 entity hibernate jpa locking

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

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

这两笔交易都是冲突的.所以我需要锁定表格.我知道锁定功能,

aRepository.lock(对象);

但问题是这将只锁定一行,我想锁定整个表(实体),因为我正在计算总行数.

请指教.

Has*_*cay 2

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

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
Run Code Online (Sandbox Code Playgroud)

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

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

aRepository.lock(Object);
Run Code Online (Sandbox Code Playgroud)

但我不建议这样做。