JPA 使用 NO LOCK 读取数据

Era*_*tes 6 sql sql-server jpa criteria-api jakarta-ee

在我们正在编写的应用程序中,我们需要with(NOLOCK)在查询中使用 。只是为了使查询不会花费很长时间来处理。

我还没有找到任何关于如何实现这一点的信息。我确实发现了如何启用乐观或悲观锁定,但据我所知,这是用于写入数据,而不是读取数据。

有没有办法做到这一点?

我们使用 JPA 和 Criteria API 连接到 MSSQL 服务器,应用程序服务器是 Glassfish 4。

埃特斯

And*_*i I 5

with(NOLOCK)行为是非常simmilar在读UNCOMMITED事务隔离级别的工作,因为它是解释在这里。鉴于此,您可以通过使用在该事务级别配置的数据库连接来实现您想要的。如果要在执行过程中决定使用哪个事务级别,只需获取底层连接并更改事务隔离级别(之后您应该将其更改回原始级别)。

如果您将该with(NOLLOCK)功能用于不同的目标以避免某些错误,那么您将必须为此编写本机查询。


Ven*_*kat 5

JPA 中的WITH (NOLOCK)相当于使用READ_UNCOMMITTED 隔离级别。

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
Run Code Online (Sandbox Code Playgroud)


Ale*_*kov 0

您的任务的正确解决方案是使用乐观锁定,默认情况下在主要 JPA 提供程序中启用该锁定。简而言之:在没有锁定的情况下,您必须对从数据库中读取数据无所事事。另一方面,当启用悲观模式时,JPA 通过数据库行锁定机制(通常)提供锁定整个表行。欲了解更多信息,请查看链接