将带有参数的hibernate sql查询字符串打印到日志中

时间:2010-10-11 10:31:59

标签: java hibernate

在我的hibernate配置中,show_sql属性为'true',因为我没有使用log4j API进行日志记录,默认情况下hibernate显示的查询为'?'在tomcat控制台中标记。

在我的情况下,我需要打印完整的sql查询,其参数值由hibernate执行到日志中,但我没有使用log4j API进行日志记录来配置org.hibernate.SQL和{{1}的调试级别}。

对于日志记录,我们手动将内容写入文件,因此在这种情况下,任何人都可以告诉我如何将hibernate查询转换为日志。

2 个答案:

答案 0 :(得分:0)

  

在我的情况下,我需要打印完整的sql查询,其参数值由hibernate执行到日志中,但我没有使用log4j API进行日志记录来配置org.hibernate.SQL和{{1}的调试级别}

无论您是否使用日志记录框架,Hibernate都会在记录预准备语句时输出问号。

如果要使用绑定值打印“真实查询”,则必须使用P6Spy之类的JDBC代理驱动程序(不再移动)或log4jdbc

答案 1 :(得分:0)

正如您所说的“使用hibernate执行的参数值打印sql查询到日志中”

您可以将以下参数设置到log4j.properties文件

#following parameters will be used to log the sql parameters
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace

它将打印查询以及sql参数和数据类型。

Hibernate: insert into employee (employee_address, employee_name, id) values (?, ?, ?)
11:50:40, 209 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [VARCHAR] - [Address 0]
11:50:40, 209 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [2] as [VARCHAR] - [Employee 0]
11:50:40, 209 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [3] as [BIGINT] - [7008]
11:50:40, 210 DEBUG [org.hibernate.SQL] - insert into employee (employee_address, employee_name, id) values (?, ?, ?)

请访问此帖子了解有关代码的详细信息: - http://techpost360.blogspot.in/2016/10/hibernate-show-sql-with-parameter-values.html