You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

疑问

  1. 上述INFO信息是否导致Insert语句无法打印?
  2. 无法查看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语句的可能原因排查

  1. 事务未提交:如果Insert操作处于未提交的事务中,Hibernate可能延迟执行SQL(比如到事务提交时才批量执行),此时不会立即打印Insert语句。检查代码中是否调用了transaction.commit(),或Spring事务是否正确触发提交。
  2. 日志配置遗漏关键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"/>
      
  3. 缓存或批量操作延迟:
    • 若开启二级缓存或批量插入配置(如hibernate.jdbc.batch_size),Hibernate可能缓存Insert操作,直到达到批量阈值或事务提交时才执行并打印SQL。
  4. 实体类映射问题:
    • 检查实体类是否标记@Entity、主键生成策略是否配置正确。若实体未被正确映射,Hibernate不会生成对应的Insert语句。
  5. 版本兼容性问题:
    • 虽然ojdbc8 19.20.0.0与Hibernate 5.3.2理论兼容,但可尝试升级Hibernate到同系列较新版本(如5.3.x最新补丁版),排除版本适配问题。

内容的提问来源于stack exchange,提问作者Sanat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:51:08