【问题标题】:Conversion exception with Hibernate 4 while JUnit testing with Spring使用 Spring 进行 JUnit 测试时使用 Hibernate 4 的转换异常
【发布时间】:2016-02-04 22:42:26
【问题描述】:

我使用 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>

【问题讨论】:

    标签: spring hibernate junit


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。以我的坏眼睛可能需要更长的时间。我是新手。
    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2012-01-27
    • 2012-10-26
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多