在我们正在编写的应用程序中,我们需要在查询中使用with(NOLOCK)
。只是为了让查询花费这么长时间来处理。
我还没有找到关于如何实现这一目标的任何事情。我找到的是如何启用乐观或悲观锁定,但据我所知,这是用于编写数据而不是阅读。
有办法做到这一点吗?
我们正在使用JPA和Criteria API连接到MSSQL服务器,而应用程序服务器是Glassfish 4。
Erates
答案 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