当前位置: 首页 > 知识库问答 >
问题:

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

呼延俊风
2023-03-14
sql_show = true

hibernate中的这个属性打印运行的sql,但我也想看到begin-transaction和complete-transaction语句,以便跟踪事务持续时间并查看在哪个事务中运行的查询。

谷歌搜索揭示了这一点

log4j.logger.org.hibernate.SQL = DEBUG, defaultAppender
log4j.logger.org.hibernate.type = DEBUG, defaultAppender
log4j.logger.org.hibernate.transaction=DEBUG, defaultAppender

应该也会向您显示交易级别的数据。但它没有。

我进一步研究了hibernate代码,发现了一个类名

org.hibernate.ejb.TransactionImpl

这个类有begin和complete方法,但这个方法不记录任何事情。

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


共有3个答案

龚跃
2023-03-14

如果您还想查看新创建事务的事务隔离级别:

log4j.logger.org.springframework.transaction.support.AbstractPlatformTransactionManager=debuglog4j.logger.org.springframework.orm.hibernate5. HibernateTransactionManager=debuglog4j.logger.org.springframework.orm.jpa.JpaTransactionManager=debuglog4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=debug

龙弘济
2023-03-14

尝试设置Hibernategenerate_statistics属性

<prop key="hibernate.generate_statistics">true</prop>

并设置

log4j.logger.org.hibernate=DEBUG

然后您将看到所有hibernate日志,您将能够正确选择hibernate类登录log4j配置文件

王扬
2023-03-14

>

  • 对于SLF4J记录:

    <logger name="org.hibernate.engine.transaction.internal.TransactionImpl" level="debug"/>
    

    对于Log4j:

     <logger name="org.hibernate.engine.transaction.internal.TransactionImpl">
          <level value="DEBUG"/>
     </logger>
    

    您需要设置日志阈值以调试以下类:

    >

  • 对于JDBC事务(例如RESOURCE_LOCAL)

    >

    <logger name="org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction" level="debug"/>
    

    对于Log4j:

    <logger name="org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction">
       <level value="DEBUG"/>
    </logger>
    

    对于JTA交易

    >

    <logger name="org.hibernate.engine.transaction.internal.jta.JtaTransaction" level="debug"/>
    

    对于Log4j:

    <logger name="org.hibernate.engine.transaction.internal.jta.JtaTransaction">
       <level value="DEBUG"/>
    </logger>
    

    最好为尽可能少的类激活调试级别,否则,日志大小将显著增加。

  •  类似资料:
    • 在我的项目中,我将Hibernate与Spring和JPA结合使用。代码在服务层使用注释驱动的事务(使用@Transactional注释支持事务)。事务管理器是org.springframework.orm.hibernate4.HibernateTransactionManager。当任何@Transactional注释方法中发生异常时,当前事务将自动回滚。 我想知道如果我想在事务回滚时记录异常

    • 问题内容: 据我了解,事务开始于调用语句,然后终止于调用命令,如下例所示。 我理解正确吗?如果不能,请指正我,因为这实际上是我第一次在现实生活中使用交易。 谢谢。 问题答案: 好吧,根据php doc,您是对的。 在上面的示例中: 的是自动提交,因为它是默认的行为。 在 没有 自动致力于因。 将被自动提交,因为是 复位 通过。

    • 问题内容: 我已经开始在一个拥有数以百计的表和视图的数据库的地方工作,所有这些表和视图都具有隐秘的名称,只有很少的元音,并且没有文档。它们也不允许对数据库架构进行无谓的更改,我也不能触摸任何数据库,除非要在我自己的计算机上进行测试(该数据库会被删除并定期重新创建),因此我无法添加对任何人都有用的注释。 我尝试使用“ Toad”创建一个ER图,但是连续运行48小时后,它仍然看不到任何可见的东西,我需

    • 尝试站点parse.com将数据加载到数据库中 类DBHelper扩展了SQLiteOpenHelper{ 在模拟器上获取 java.lang.IllegalStateExcema:尝试重新打开已关闭的对象:SQLiteDatabase: /data/data/com.project.test/databases/myDBandroid.database.sqlite.SQLiteClosable

    • 一、Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上。如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的。见如下示例:

    • 在JPA中,如果我尝试使用setter和getter方法更新托管对象而不使用事务开始和提交,考虑到在中,JPA是否会自动更新数据库(不是立即而是稍后)。