【问题标题】:JDBC, Hibernate and Implicit Transactions on SQL Server 2008SQL Server 2008 上的 JDBC、休眠和隐式事务
【发布时间】:2012-12-28 03:19:02
【问题描述】:

当从 Hibernate 发出并在 Glassfish 实例上运行时,我们在 SQL Server 2008 上获得'stuck' 的连接存在一些问题。

偶尔会有 10 或 20 次对存储过程的调用,它们都是 'sleeping',并且正在保持打开的许多事务。

当我使用DBCC INPUTBUFFER 来了解更多关于他们的信息时,它有:

名称:implicit_transaction

这是否意味着 java 应用程序将 'SET IMPLICIT_TRANSACTIONS ON' 设置为批处理的一部分?我能够在数据库端复制该事务名称的唯一方法是使用该语法。

Java 应用程序似乎挂在连接上,但不知何故丢失了调用本身的上下文,因此它永远不会回来提交事务。

Java 开发人员说他们没有明确定义任何连接,也没有说他们故意设置任何其他连接属性。这些调用都是在 READ COMMITTED 隔离级别下进行的。

我怎样才能知道是否有一些隐藏的属性集,或者是一些休眠设置导致了这种烦人的行为?

【问题讨论】:

    标签: java sql-server hibernate transactions glassfish


    【解决方案1】:

    您可以让 Hibernate 记录它正在执行的 sql 语句。

    article 描述了两种方法。

    SessionFactory sf = new Configuration()
        .setProperty("hibernate.show_sql", "true")
        // ...
        .buildSessionFactory();
    

    或在 log4j 配置中

    log4j.logger.org.hibernate.SQL=DEBUG, SQL_APPENDER
    log4j.additivity.org.hibernate.SQL=false
    

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2012-04-10
      • 2010-12-08
      • 2014-06-22
      • 1970-01-01
      • 2012-04-30
      • 2011-05-01
      • 1970-01-01
      • 2016-03-19
      相关资源
      最近更新 更多