Hibernate不显示SQL参数值,Spring Boot配置问题排查
问题
我有一个Spring Boot应用,application.properties配置如下:
spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS TEST spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.show-sql=true spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.sql.init.mode=always spring.jpa.hibernate.ddl-auto=update spring.h2.console.enabled=true spring.jpa.properties.hibernate.format_sql=true server.port=8080 spring.jpa.defer-datasource-initialization=true
保存project.staff数据时,日志仅输出SQL框架,看不到参数:
Hibernate: insert into project.staff (school_name, tc) values (?, ?)
但另一个保存price数据的API能正常输出参数绑定日志:
Hibernate: insert into price (brand_id, curr) values (default, ?, ?, ?, ?, ?, ?, ?, ?) 2023-12-31 20:19:54.914 TRACE 47712 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [1] 2023-12-31 20:19:54.914 TRACE 47712 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [EUR]
我尝试添加logging.level.org.hibernate.type=trace配置,但没有效果,检查application.properties也没发现配置差异,请问需要补充什么配置才能显示SQL参数日志?
解决方案
直接在
application.properties中添加更精准的日志级别配置:logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE该配置针对负责参数绑定的核心类
BasicBinder开启TRACE级别日志,比宽泛的org.hibernate.type配置更精准,能确保参数绑定日志正常输出。若上述配置无效,检查项目中是否存在
logback.xml、log4j2.xml等自定义日志配置文件,确认这些文件没有将org.hibernate.type.descriptor.sql或BasicBinder的日志级别设置为TRACE以上(如INFO、WARN),避免覆盖Spring Boot的配置。若使用较旧的Hibernate版本,可尝试将配置改为:
logging.level.org.hibernate.type=TRACE配置项的大小写不影响Spring Boot识别,但严格匹配格式更稳妥。
内容的提问来源于stack exchange,提问作者Serdar
相关产品推荐
相关产品推荐

