2015-11-04 101 views
1

我使用org.springframework.orm.hibernate4.LocalSessionFactoryBean类创建了sessionFactory bean,并使用org.springframework.orm.hibernate4.HibernateTransactionManager类创建了transactionManager bean。使用Hibernate 4进行转换异常,同时使用Spring进行JUnit测试

在执行JUnits测试时,会显示以下内容。

“由org.springframework.beans.ConversionNotSupportedException导致:无法将类型'java.lang.String'的属性值转换为属性'sessionFactory'所需的类型'org.hibernate.SessionFactory';嵌套异常是java .lang.IllegalStateException:无法将属性'sessionFactory'的类型[java.lang.String]的值转换为所需的类型[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> 

回答

0

您必须将引用传递给bean,而不是值。因此,改变这种:

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

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

谢谢你很多。用我的坏眼睛可能需要更长的时间。我对此很陌生。 –