2013-01-17 49 views
1

我在這裏遇到麻煩.. 我是新的Java SE應用程序中使用Spring + Hibernate的...的EntityManager和persist方法不能正常工作

我試圖實例化EntityManager的,但它的不工作

我使用註釋@PersistenceUnit,像這樣:

@PersistenceUnit 
public void setEmf(EntityManager emf) { 
    this.emf = emf; 
} 

和它的作品「精」,但它不堅持=/ 當我改變

@PersistenceContext 
public void setEmf(EntityManager emf) { 
    this.emf = emf; 
} 

它出來了以下錯誤:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoAbstract' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy10 implementing org.hibernate.ejb.HibernateEntityManagerFactory,org.springframework.orm.jpa.EntityManagerFactoryInfo' to required type 'javax.persistence.EntityManager' for property 'emf'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy10 implementing org.hibernate.ejb.HibernateEntityManagerFactory,org.springframework.orm.jpa.EntityManagerFactoryInfo] to required type [javax.persistence.EntityManager] for property 'emf': no matching editors or conversion strategy found 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:532) 

這裏是我的applicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> 

    <bean id="ConfiguradorDePropriedades" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <description>The service properties file</description> 
     <property name="location" value="file:AppConfig.properties" /> 
    </bean> 

    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 


    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <!-- <property name="persistenceUnitName" value="ChatJpa" /> --> 
     <property name="persistenceXmlLocation" value="classpath:persistence.xml" /> 
     <property name="dataSource" ref="dataSourceLocal" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="database" value="${database}" /> 
       <property name="showSql" value="false" /> 
       <property name="generateDdl" value="true" /> 
      </bean> 
     </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <bean id="dataSourceLocal" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${driver}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.user}" /> 
     <property name="password" value="${jdbc.pass}" /> 
    </bean> 

    <bean id="daoAbstract" class="com.planner.pvc.dao.DaoAbstract"> 
     <property name="emf" ref="entityManagerFactory" /> 
    </bean> 

    <bean id="clienteDao" class="com.planner.pvc.dao.ClienteDaoImpl"> 
    </bean> 

    <bean id="pvcMainController" class="com.planner.pvc.controller.PVCMainController"> 
     <property name="dao" ref="clienteDao" /> 
    </bean> 



</beans> 

而且persistence.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="ChatJpa"> 
     <properties> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
      <!-- <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> 
      <property name="hibernate.cache.use_query_cache" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> --> 
     </properties> 
    </persistence-unit> 
</persistence> 

任何幫助,將不勝感激。

感謝

回答

3

這條線的問題是:

<bean id="daoAbstract" class="com.planner.pvc.dao.DaoAbstract"> 
    <property name="emf" ref="entityManagerFactory" /> 
</bean> 

而不是做這個的,讓Spring注入與@PersistenceContext註釋電動勢場,如果你有一個<context:component-scan.../><context:annotation-config/>標籤會出現這種情況你應用程序上下文或只添加後者。

+0

它實際上工作!謝謝,@Biju Kunjummen –