2015-11-04 78 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

謝謝你很多。用我的壞眼睛可能需要更長的時間。我對此很陌生。 –

相關問題