Java 如何从Hibernate和Spring获取数据库查询的打印输出

Java 如何从Hibernate和Spring获取数据库查询的打印输出,java,sql,database,spring,hibernate,Java,Sql,Database,Spring,Hibernate,我从事一个巨大的Java项目,包括Spring和hibernate 我最近调试了一些数据库查询问题并深入研究,直到我发现这实际上是执行查询的地方: org.springframework.transaction.support.TransactionTemplate.execute(TransactionCallback<T>) 为了获得查询的模板,我得到的不是字段和值的名称,而是编号的替换变量,即“从Yada选择param1,param2,其中thisthing=param3”

我从事一个巨大的Java项目,包括Spring和hibernate

我最近调试了一些数据库查询问题并深入研究,直到我发现这实际上是执行查询的地方:

org.springframework.transaction.support.TransactionTemplate.execute(TransactionCallback<T>)
为了获得查询的模板,我得到的不是字段和值的名称,而是编号的替换变量,即“从Yada选择param1,param2,其中thisthing=param3”

我打了个电话

org.hibernate.Query.getNamedParameters()
获取命名参数(param1、param2、param3)的值

然而,这是相当麻烦的,因为查询非常大和复杂


我想知道的是,是否有一种方法可以将查询打印到标准输出,该方法已经将替换变量替换为值和命名参数。基本上,一个完整的查询,就像有人在数据库中手动输入一样。

在hibernate配置中

如果您在persistence.xml中使用JPA

<property name="hibernate.show_sql" value="true" />

添加到应用程序属性

 spring.jpa.properties.hibernate.show_sql=true
    spring.jpa.properties.hibernate.use_sql_comments=true
    spring.jpa.properties.hibernate.format_sql=true
要记录值,请执行以下操作:

spring.jpa.properties.hibernate.type=trace 

如果要将语句写入日志,请将
org.hibernate.SQL
的日志级别设置为
DEBUG
。如果将
org.hibernate.type.descriptor.sql的日志级别设置为
TRACE
,则会记录绑定参数

其他答案建议使用
hibernate.show\u sql
指示hibernate将sql语句写入STDOUT。因此,这不能由您选择的日志框架控制。另一个主要缺点是:
persistence.xml
通常是应用程序JAR的一部分,如果不重新打包应用程序,就无法更改

建议阅读:

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=INFO, stdout

# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate=INFO

# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.type=trace
 spring.jpa.properties.hibernate.show_sql=true
    spring.jpa.properties.hibernate.use_sql_comments=true
    spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.type=trace