Sql server JPA使MSSQL事务锁定

Sql server JPA使MSSQL事务锁定,sql-server,hibernate,jpa,glassfish,ejb-3.0,Sql Server,Hibernate,Jpa,Glassfish,Ejb 3.0,我们有一个运行在Glassfish 3.0.1上的Java EE应用程序,它使用EJB、JPA和Hibernate作为实现,并使用MS SQL Server 2008 R2作为数据库引擎,JTDS作为JDBC驱动程序。通过在每个实体上指定@version字段,我们选择了乐观锁定策略。数据库访问可以是并发的,在JTA事务期间可能会请求大量的数据库读取 我们试图通过按小的工作单元进行细分,使交易尽可能快 不幸的是,我们正处于这样一种情况:数据库锁永远不会结束。我们可以从MS SQL Server活动

我们有一个运行在Glassfish 3.0.1上的Java EE应用程序,它使用EJB、JPA和Hibernate作为实现,并使用MS SQL Server 2008 R2作为数据库引擎,JTDS作为JDBC驱动程序。通过在每个实体上指定@version字段,我们选择了乐观锁定策略。数据库访问可以是并发的,在JTA事务期间可能会请求大量的数据库读取

我们试图通过按小的工作单元进行细分,使交易尽可能快

不幸的是,我们正处于这样一种情况:数据库锁永远不会结束。我们可以从MS SQL Server活动监视器中看到,一个事务会锁定其他事务,并且在我们杀死它之前,该事务不会停止。如果我们查看该语句,它是对历史记录表的插入,它阻止了在与历史记录表无关的其他表上选择的其他事务


第一个问题,既然我们采用乐观锁定策略,为什么SQL Server会锁定表?我们如何防止这种行为?

这可能不是SQL Server的问题,而是应用程序配置的问题。为什么插入“永不结束”?可能它也被封锁了?凭什么?尝试在数据库上启用两个快照隔离设置。这可能不是SQL Server问题,而是应用程序的配置问题。为什么插入“永不结束”?可能它也被封锁了?凭什么?尝试在数据库上启用两个快照隔离设置。