Hibernate日志无法显示Insert语句,求排查原因及Oracle提示影响
Hibernate无法打印Insert语句问题排查
已配置的Hibernate日志参数
我已在应用中开启以下Hibernate日志配置:
spring.hibernate.show_sql=true spring.hibernate.format_sql=true spring.hibernate.use_sql_comments=true
当前现象与日志调整
目前可正常查看Hibernate的查询及Select语句,但无法看到Insert语句。
为排查问题,我修改了日志配置如下:
<logger name="com.db.nwd.hibernate" level="TRACE"/> <logger name="com.db.nwd.zk.utils.HibernateSessionExecutionListener" level="TRACE"/> <logger name="org.hibernate" level="TRACE"/>
调整后出现一条日志信息:
INFO [SequenceIdentityGenerator] - <HHH000067: Disallowing insert statement comment for select-identity due to Oracle driver bug>
疑问
- 上述INFO信息是否导致Insert语句无法打印?
- 无法查看Hibernate Insert语句的原因是什么?
环境信息
- Hibernate版本:5.3.2-final
- Spring版本:5.3.34
- 数据库:Oracle
- JDBC驱动版本:com.oracle.database.jdbc:ojdbc8:19.20.0.0
- 已尝试将日志级别从INFO改为TRACE
解答
关于那条INFO信息的影响
这条日志仅表示Hibernate因Oracle驱动的已知Bug,禁用了Insert语句的注释功能,不会导致Insert语句本身无法打印。它仅影响SQL语句中是否附带注释,和SQL语句的打印与否无关。
无法打印Insert语句的可能原因排查
- 事务未提交:如果Insert操作处于未提交的事务中,Hibernate可能延迟执行SQL(比如到事务提交时才批量执行),此时不会立即打印Insert语句。检查代码中是否调用了
transaction.commit(),或Spring事务是否正确触发提交。 - 日志配置遗漏关键Logger:
- 确保
org.hibernate.SQL的日志级别设置为DEBUG或TRACE,这个Logger专门负责打印生成的SQL语句。你当前配置了org.hibernate为TRACE,理论上包含该Logger,但可单独显式配置确认:<logger name="org.hibernate.SQL" level="DEBUG"/> - 若需查看SQL参数,还需配置:
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
- 确保
- 缓存或批量操作延迟:
- 若开启二级缓存或批量插入配置(如
hibernate.jdbc.batch_size),Hibernate可能缓存Insert操作,直到达到批量阈值或事务提交时才执行并打印SQL。
- 若开启二级缓存或批量插入配置(如
- 实体类映射问题:
- 检查实体类是否标记
@Entity、主键生成策略是否配置正确。若实体未被正确映射,Hibernate不会生成对应的Insert语句。
- 检查实体类是否标记
- 版本兼容性问题:
- 虽然ojdbc8 19.20.0.0与Hibernate 5.3.2理论兼容,但可尝试升级Hibernate到同系列较新版本(如5.3.x最新补丁版),排除版本适配问题。
内容的提问来源于stack exchange,提问作者Sanat
相关产品推荐
相关产品推荐

