如何在Hibernate中记录数据库事务的开始和完成

Bhu*_*van 12 java hibernate log4j transactions glassfish

sql_show = true
Run Code Online (Sandbox Code Playgroud)

hibernate中的这个属性打印出运行的sql,但我想查看begin transactioncomplete transaction语句,以便我可以跟踪事务持续时间并查看在哪个事务中运行的查询.

谷歌搜索揭示了这一点

log4j.logger.org.hibernate.SQL = DEBUG, defaultAppender
log4j.logger.org.hibernate.type = DEBUG, defaultAppender
log4j.logger.org.hibernate.transaction=DEBUG, defaultAppender
Run Code Online (Sandbox Code Playgroud)

还应该显示交易级别数据.但它没有.

调查更多我查看了hibernate代码并找到了一个类名

org.hibernate.ejb.TransactionImpl
Run Code Online (Sandbox Code Playgroud)

这个类有begin和complete方法,但是这个方法不记录任何东西.

有关如何在hibernate中查看事务级别信息的任何建议
我正在使用hibernate 2.2

Vla*_*cea 16

对于Hibernate 5

对于Hibernate 4

您需要为以下类将日志记录阈值设置为DEBUG:

  1. 对于JDBC事务(例如RESOURCE_LOCAL)

  2. 对于JTA交易

最好为尽可能少的类激活DEBUG级别,否则,您的日志大小将显着增加.

  • 谢谢。这是为 Hibernate 4 编写的,但我也针对 Hibernate 5 更新了它。 (2认同)

小智 5

尝试设置休眠的generate_statistics属性

<prop key="hibernate.generate_statistics">true</prop>
Run Code Online (Sandbox Code Playgroud)

并设置

log4j.logger.org.hibernate=DEBUG
Run Code Online (Sandbox Code Playgroud)

那么您将看到所有休眠日志,并且您将能够正确选择休眠类来登录log4j配置文件