是否可以在 Hibernate 中使用实际值而不是问号打印生成的 SQL 查询?
如果 Hibernate API 无法实现,您会如何建议打印具有真实值的查询?
原文由 craftsman 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用的是 Spring Boot,只需配置以下内容:
application.yml
logging:
level:
org.hibernate.SQL: DEBUG
org.hibernate.type: TRACE
application.properties
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
仅此而已。
您的日志将是这样的:
2020-12-07 | DEBUG | o.h.SQL:127 - insert into Employee (id, name, title, id) values (?, ?, ?, ?)
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [1] as [VARCHAR] - [001]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [2] as [VARCHAR] - [John Smith]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:52 - binding parameter [3] as [VARCHAR] - [null]
2020-12-07 | TRACE | o.h.t.d.s.BasicBinder:64 - binding parameter [4] as [BIGINT] - [1]
原文由 JRichardsz 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
1 回答2.4k 阅读✓ 已解决
您需要为以下类别启用 日志记录:
org.hibernate.SQL
- 设置为debug
在执行时记录所有 SQL DML 语句org.hibernate.type
- 设置为trace
记录所有JDBC参数因此 log4j 配置可能如下所示:
第一个相当于
hibernate.show_sql=true
legacy property ,第二个 打印绑定参数等。另一种解决方案(非基于休眠的)是使用像 P6Spy 这样的 JDBC 代理驱动程序。