1

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

有时,将有 10 或 20 次对存储过程的调用,这些调用都是'sleeping',并且保持打开多个事务。

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

名称:implicit_transaction

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

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

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

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

4

1 回答 1

0

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

本文介绍了两种方法来做到这一点。

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
于 2013-01-14T09:23:48.457 回答