Search code examples
springhibernateparametersjunitlog4j

How can I get Hibernate bound parameter values to show up in a Junit test?


I'm using Maven 3.0.3, SPring 3.1.1.RELEASE, Hibernate 4.1.0.Final, and log4j 1.2.15. In my Maven project, I have this log4j.xml file in src/test/resources

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
                    <param name="ConversionPattern" value="[%p]: %c - %m%n" />
        </layout>
    </appender>

    <logger name="org.mainco.subco">
        <level value="debug" />
    </logger>

    <logger name="log4j.logger.org.hibernate.SQL">
        <level value="DEBUG" />
    </logger>

    <logger name="log4j.logger.org.hibernate.type">
        <level value="TRACE" />
    </logger>

    <root>
        <priority value ="info" />
        <appender-ref ref="consoleAppender"/>
    </root>

</log4j:configuration>

My datasource is configured like so in my test application context:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${test.mysql.dataSource.driverClassName}" />
    <property name="url" value="${test.mysql.dataSource.url}" />
    <property name="username" value="${test.mysql.db.user}" />
    <property name="password" value="${test.mysql.db.password}" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="org.mainco.subco" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaPropertyMap" ref="jpaPropertyMap" />
</bean>

<util:map id="jpaPropertyMap">
    <entry key="hibernate.show_sql" value="true" />
    <entry key="dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
    <entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
    <entry key="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
    <entry key="hibernate.cache.use_second_level_cache" value="true" />
    <entry key="hibernate.cache.use_query_cache" value="false" />
    <entry key="hibernate.generate_statistics" value="true" />
</util:map>

However, when I run my JUnit tests, although the SQL displays, the parameters that get bound to the SQL do not. How can I change any of the above to get the binding parameters to appear via System.out (or on the console)? - Dave


Solution

  • Since you're using log4j.xml, the logger configuration should be

    <logger name="org.hibernate.type">
    

    Not

    <logger name="log4j.logger.org.hibernate.type">
    

    The later is log4j.properties style