Hibernate 4.3 显示 SQL 参数

5

我正在使用log4j2与slf4j和hibernate 4.3.1。 我遇到了显示SQL查询参数的问题。 我没有找到任何方法来显示它们(SQL查询被正确显示,但没有参数)。 下面是我在persistence.xml中指定的内容:

<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="xxxxx" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments" value="true"/>
        <property name="hibernate.query.factory_class"
            value="org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory" />
        <property name="max_fetch_depth" value="2" />
        <property name="hibernate.jdbc.batch_size" value="100" />
    </properties>
</persistence-unit>

我在我的log4j2.xml文件中定义了这个:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" verbose="true">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
        <File name="MyFile" fileName="test.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </logger>
        <logger name="org.hibernate.type" level="TRACE" additivity="false">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </logger>
        <Root level="TRACE">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

请将Hibernate中带参数的查询字符串及其参数值打印出来的代码翻译成中文。 - John Ament
2
不是这样的。我已经测试了提出的解决方案,但它并没有起作用。我认为这与 Hibernate 的版本有关。以下是我在 Hibernate 文档中找到的内容:“日志记录重要提示 完全过时了。Hibernate 从 4.0 开始使用 JBoss 日志记录。随着我们将此内容迁移到开发人员指南,这将得到记录。” - Abbadon
请根据该 SO 问题中的提示更新您的日志记录配置。JBoss Logging 只是其他日志框架的外观,它内部使用的是类似于 SLF4J 的 jboss 日志框架。 - John Ament
<property name="hibernate.show_sql">true</property> 不起作用了吗? - Exorcismus
2个回答

2
首先,确保在类路径中有log4j-core-2.0、log4j-api-2.0和log4j-1.2-api-2.0的JAR包。
其次,JBoss对Log4J2的支持相对较新。您可能需要使用JBoss Logging 3.1.4才能使用Log4J2(参见JBLOGGING-94)。从JBoss Logging 3.2开始将会有性能改进(参见JBLOGGING-95),并且您可能可以省略log4j-1.2-api-2.0桥接JAR包。
请注意,当前的JBoss-Logging Beta1(3.2.0.Beta1)在记录日志时会出现NPE:JBLOGGING-107。因此,有必要告诉Hibernate使用slf4j API,使用org.jboss.logging.provider系统属性(请参见org.jboss.logging.LoggerProviders)。

0
<!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

他的示例中有show_sql,显然这不是被问到的内容。 - Alkanshel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接