首页 文章

使用Spring进行JUnit测试时使用Hibernate 4进行转换异常

提问于
浏览
1

我使用org.springframework.orm.hibernate4.LocalSessionFactoryBean类创建了sessionFactory bean,并使用org.springframework.orm.hibernate4.HibernateTransactionManager类创建了transactionManager bean .

在执行JUnits测试时,将显示以下内容 .

“引起:org.springframework.beans.ConversionNotSupportedException:无法将类型'java.lang.String'的属性值转换为属性'sessionFactory'所需的类型'org.hibernate.SessionFactory';嵌套异常是java.lang.IllegalStateException :无法将类型[java.lang.String]的值转换为属性'sessionFactory'所需的类型[org.hibernate.SessionFactory]:找不到匹配的编辑器或转换策略“ .

Hibernate Core依赖版本是4.3.9 .

请指教 .

下面是我的JUnit测试的datasource.xml . 测试在dev配置文件下运行 . 虽然确切的.xml代码可以顺利地在主应用程序的 生产环境 配置文件下运行 .

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

    <context:component-scan base-package="com.caveofprogramming.spring.test">
    </context:component-scan>
    enter code here
    <beans profile="dev">`enter code here`

        <context:property-placeholder
            location="com/caveofprogramming/spring/web/test/config/jdbc.properties" />

        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="${jdbc.driver}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="username" value="${jdbc.username}"></property>
        </bean>

        <!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> -->
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                    <prop key="javax.persistence.validation.group.pre-persist">
                        com.caveofprogramming.spring.web.dao.PersistenceValidationGroup
                    </prop>
                    <prop key="javax.persistence.validation.group.pre-update">
                        com.caveofprogramming.spring.web.dao.PersistenceValidationGroup
                    </prop>
                    <prop key="javax.persistence.validation.group.pre-remove">
                        com.caveofprogramming.spring.web.dao.PersistenceValidationGroup
                    </prop>
                </props>
            </property>
            <property name="packagesToScan">
                <list>
                    <value>com.caveofprogramming.spring.web.dao</value>
                </list>
            </property>
        </bean>

        <!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> -->
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
            <property name="sessionFactory" value="sessionFactory"></property>
        </bean>

        <tx:annotation-driven />

        <bean id="exceptionTranslator"
            class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor">
        </bean>

    </beans>

</beans>

1 回答

  • 0

    您必须传递对bean的引用,而不是值 . 所以改变这个:

    <property name="sessionFactory" value="sessionFactory"></property>
    

    <property name="sessionFactory" ref="sessionFactory"></property>
    

相关问题