如何让 Hibernate 绑定参数值显示在 Junit 测试中?

问题描述 投票:0回答:3

我正在使用 Maven 3.0.3、SPring 3.1.1.RELEASE、Hibernate 4.1.0.Final 和 log4j 1.2.15。在我的 Maven 项目中,我在 src/test/resources 中有这个 log4j.xml 文件

<?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>

我的数据源在我的测试应用程序上下文中的配置如下:

<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>

但是,当我运行 JUnit 测试时,虽然显示了 SQL,但绑定到 SQL 的参数却没有显示。如何更改上述任何内容以使绑定参数通过 System.out (或在控制台上)显示? - 戴夫

spring hibernate parameters junit log4j
3个回答
1
投票

由于您使用的是 log4j.xml,因此记录器配置应该是

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

不是

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

后者是log4j.properties风格


0
投票
### Hibernate logging configuration ###  

### Log everything (a lot of information, but very useful for troubleshooting) ###  
#log4j.logger.org.hibernate=info  

### Log HQL and SQL ASTs during query parsing ###  
log4j.logger.org.hibernate.hql.ast.AST=DEBUG, SQL_APPENDER  
log4j.additivity.org.hibernate.hql.ast.AST=false  

### log just the SQL  
log4j.logger.org.hibernate.SQL=DEBUG, SQL_APPENDER  
log4j.additivity.org.hibernate.SQL=false  

### log JDBC bind parameters. Very userfull, when debug parameterized queries ###  
log4j.logger.org.hibernate.type=TRACE, SQL_APPENDER  
log4j.additivity.org.hibernate.type=false  

### log schema export/update ###  
#log4j.logger.org.hibernate.tool.hbm2ddl=info  

### log HQL parse trees  
#log4j.logger.org.hibernate.hql=debug  

### log cache activity ###  
#log4j.logger.org.hibernate.cache=info  

### log transaction activity  
#log4j.logger.org.hibernate.transaction=debug  

### Log all JDBC resource acquisition  
#log4j.logger.org.hibernate.jdbc=debug 

0
投票

就我而言,使用 hibernate-core-6.2.2,我必须将此行添加到 application.properties 文件中:

logging.level.org.hibernate.orm.jdbc.bind = trace

因此要在跟踪模式下设置的包将是“org.hibernate.orm.jdbc.bind”。

因为 hibernate-core 中记录查询参数的

BasicBinder
类正在获取该属性的值:

public final void bind(PreparedStatement st, J value, int index, WrapperOptions options) throws SQLException {
    if ( value == null ) {
        if ( JdbcBindingLogging.TRACE_ENABLED ) {
...
...
© www.soinside.com 2019 - 2024. All rights reserved.