UPDATE
How to print a query string with parameter values when using Hibernate这包含标记为正确的答案,但它是从2009年开始的! Hibernate日志配置取决于版本。这写了几行。我试过这个以及其他很多但是它们不适合我。
如果有人可以提供帮助,请询问我应该在描述中添加什么。谢谢。
结束更新
问题是当显示所有SQL参数值时,我无法设置登录方式。请帮忙做到这一点。
我搜索了一下,发现我应该设置日志属性
org.hibernate.type为ALL
我试着在log4j.properties文件中设置它:
log4j.logger.org.hibernate.type=ALL
我试着在log4j.xml中设置它
<logger name="org.hibernate.type">
<level value="trace"/>
</logger>
我知道log4j肯定会读取xml配置,因为如果我在log4j.xml中放入了一些错误的标签,我会在日志中遇到错误。
不幸的是这不起作用。可能是pom.xml文件坏了。所有我都能得到 - SQL命令写入控制台,但只能使用hibernate.cfg.xml
<property name="hibernate.show_sql">true</property>
如果我在log4j.xml中设置这个org.hibernate.SQL属性它不起作用:
<logger name="org.hibernate.SQL">
<level value="debug"/>
</logger>
正如我在网上发现的那样 - hibernate的日志设置取决于它的版本。在我的项目中,我无法设置hibernate版本,但可以在我的本地工作站上使用依赖项。这里来自我的pom.xml的相关数据
<!--hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.8.Final</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.2.0.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.8.Final</version>
<scope>compile</scope>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Hibernate Spatial for mysql. This will include Hibernate Spatial Core and JTS -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>4.0.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- custom type mappings for java 8 time classes -->
<!--hibernate -->
<dependency>
<groupId>ca.gfisystems</groupId>
<artifactId>hibernate-utils</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- c3p0 used for postgresql connection -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- hibernate c3p0 connection pooling -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.1.8.Final</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
我也面临同样的问题。尝试了很多解决方案,但系统没有显示SQL语句的参数。
最后我做了以下步骤,解决了我的问题。
将log4j库版本从版本(1.2.16)更改为(1.2.11)以进行测试
在log4j.properties中添加了以下行
log4j.logger.org.hibernate=INFO
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
并在hibernate.cfg.xml中
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
然后问题就解决了
我分析的主要问题是库版本(1.2.16)。可能是,在版本(log4j - 1.2.16)上有一些其他配置来显示参数。