记录JDBC/Hibernate/JPA事务隔离级别

zpi*_*ter 4 hibernate jpa transactions jdbc isolation-level

我正在开发一个连接到Microsoft SQL Server数据库的Flex/BlazeDS/Spring/JPA/Hibernate Web应用程序.它似乎是过于激进地锁定表格.从我的研究来看,看起来使用快照隔离策略是最好的选择.

我已经这样设定了:

  <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true">
    <property name="persistenceUnitName" value="OrderManagerPersistenceUnit" />
    <property name="dataSource" ref="dataSource"/>
     <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
     </property>
    <property name="jpaProperties">
      <props>
        <prop key="hibernate.jdbc.batch_size">${db.main.hibernate.jdbc.batch_size}</prop>
        <prop key="hibernate.hbm2ddl.auto">${db.main.hbm2ddl.auto}</prop>
        <prop key="hibernate.search.default.indexBase">${db.main.search.default.indexBase}</prop>
        <prop key="hibernate.search.autoregister_listeners">${db.main.search.autoregister_listeners}</prop>
          <prop key="hibernate.show_sql">${db.main.show_sql}</prop>
          <prop key="hibernate.dialect">${db.main.dialect}</prop>
          <prop key="hibernate.connection.isolation">${db.main.isolation}</prop>
          <prop key="hibernate.ejb.naming_strategy">com.herffjones.zebra.db.ZebraNamingStrategy</prop>
      </props>
    </property>
  </bean>
Run Code Online (Sandbox Code Playgroud)

但是,我不相信它实际上是在使用hibernate.connection.isolation.看起来我必须在JDBC数据源上设置一些属性.

我想验证它当前是否使用4096作为查询的事务隔离级别.

我可以将哪些包和日志级别添加到我的logback.xml文件中,以清楚地查看特定查询正在使用的隔离级别?

谢谢!

Καr*_*hικ 6

您应该将hibernate的事务隔离级别设置为2(READ_COMMITTED的java.sql.Connection常量.

然后在SQL Server 2005实例中执行以下操作(没有活动连接):

ALTER DATABASE [database_name] SET ALLOW_SNAPSHOT_ISOLATION ON; ALTER DATABASE [database_name] SET READ_COMMITTED_SNAPSHOT ON;

通过执行此查询进行测试:

SELECT [name],snapshot_isolation_state_desc,snapshot_isolation_state,is_read_committed_snapshot_on FROM sys.databases WHERE [name] ='database_name';

现在,READ_COMMITTED将在SQL Server中解释为READ_COMMITTED_SNAPSHOT.