2013-01-14 20 views
1

當從Hibernate發佈時,在Glassfish實例上運行SQL Server 2008上的連接時,我們遇到了一些問題'stuck'SQL Server 2008上的JDBC,Hibernate和隱式事務

偶爾會有10或20個調用存儲過程,全部是'sleeping',並且持有一些事務處理。

當我使用DBCC INPUTBUFFER,以瞭解更多關於他們,它具有:

名稱:IMPLICIT_TRANSACTION

這是否意味着在Java應用程序中,設置'SET IMPLICIT_TRANSACTIONS ON'作爲批次的一部分嗎?我能夠重新標識事務名稱DB側的唯一方法就是使用該語法。

似乎Java應用程序掛在連接上,但不知何故失去了調用本身的上下文,因此它永遠不會回來提交事務。

java開發人員說,他們沒有明確定義任何連接,並且不打算他們故意設置任何其他連接屬性。這些調用都是在READ COMMITTED隔離級別下進行的。

怎樣才能知道是否有一些隱藏的屬性設置,或者如果一些休眠設置導致這種惱人的行爲?

回答

0

你可以讓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