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
如果您还想查看新创建事务的事务隔离级别:
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
尝试设置Hibernategenerate_statistics属性
<prop key="hibernate.generate_statistics">true</prop>
并设置
log4j.logger.org.hibernate=DEBUG
然后您将看到所有hibernate日志,您将能够正确选择hibernate类登录log4j配置文件
>
对于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是否会自动更新数据库(不是立即而是稍后)。