JPA使用NO LOCK读取数据

时间:2015-03-17 08:05:11

标签: sql sql-server java-ee jpa criteria-api

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

我还没有找到关于如何实现这一目标的任何事情。我找到的是如何启用乐观或悲观锁定,但据我所知,这是用于编写数据而不是阅读。

有办法做到这一点吗?

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

Erates

3 个答案:

答案 0 :(得分:3)

with(NOLOCK)行为非常类似于在READ-UNCOMMITED事务隔离级别工作,正如here所述。鉴于此,您可以使用在该事务级别中配置的数据库连接来实现所需的功能。如果您想在执行期间决定使用什么事务级别,简单get the underlying connection并更改事务隔离级别(之后您应该将其更改回原始级别)。

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

答案 1 :(得分:0)

您的任务的正确解决方案是使用乐观锁定,默认情况下在主JPA提供程序中启用。简而言之:如果不锁定,您无需从数据库中读取数据。另一方面,当启用悲观模式时,JPA通过数据库行锁定机制(通常)提供锁定整表行。有关详细信息,请查看link

答案 2 :(得分:0)

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

1