2016-05-19 8 views
1

SpringとHibernateは両方とも私にとって新しいツールです。Beanのプロパティ 'entityManager'に書き込みができないか、または無効なセッターメソッドがあります(SpringとHibernateを使用)

spring.xml:

<bean id="my.supervisionFramesProcess" class="supervision.frames.SupervisionFramesProcess" 
    init-method="startup" destroy-method="shutdown"> 
    <property name="SupervisionDAO"> 
     <bean class="supervision.dao.jpa.JpaSupervisionDao"> 
      <property name="entityManager" ref="my.entity-manager-factory"  /> 
     </bean> 
    </property> 
</bean> 

<bean id="my.dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://XXXX/supervision?autoReconnect=true" /> 
    <property name="username" value="***" /> 
    <property name="password" value="***" /> 
    <property name="maxIdle" value="5" /> 
    <property name="maxActive" value="100" /> 
    <property name="maxWait" value="30000" /> 
    <property name="testOnBorrow" value="true" /> 
    <property name="validationQuery" value="SELECT 1" /> 
</bean> 

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

<bean id="my.entity-manager-factory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml" /> 
    <property name="dataSource" ref="my.dataSource" /> 
    <property name="persistenceUnitName" value="SUPERVISION-1.0" /> 
</bean> 

JpaSupervisionDao.xml:

@PersistenceContext(unitName = "SUPERVISION-1.0") 
private EntityManager entityManager; 

public JpaSupervisionDao() { 
    if (logger.isDebugEnabled()) 
     logger.debug("New instance DAO : " + this); 
} 
protected void setEntityManager(EntityManager entityManager) { 
    this.entityManager = entityManager; 
} 
protected EntityManager getEntityManager() { 
    return entityManager; 
} 

@Override 
public SupervisionDbObject selectSupervisionDbObject(SupervisionDbObject supervision) { 
    Query query = getEntityManager().createQuery(SELECT_SUPERVISION); 
} 

のpersistence.xml:

JDBCを使用して
<persistence-unit name="SUPERVISION-1.0"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>supervision.dao.SupervisionDbObject</class> 
</persistence-unit> 

、私のDataSourceがインスタンス化することができ、完全に機能していますが、 HibernateとentityManagerを使って、私はエラーだけを受け取ります:

Bean property 'entityManager' is not writable or has an invalid setter method. 

代わりにEntityManagerFactoryオブジェクトを使用しようとしましたが、同じエラーが発生します。

誰かが私を助けることができますか?

+1

あなたの 'setEntityManager'は' protected'です。しかし、それを削除して '@ PersistenceContext'を動作させるべきです。あなたの設定に ''があることを確認してください。 –

+0

PersistenceAnnotationBeanPostProcessorのようなBeanがすでに存在する場合、本当にが必要ですか? (opに追加) – warzag

+0

あなたはそうしませんが、 ''は 'PersistenceAnnotationBeanPostProcessor'(' @ Autowired'のような)だけを行います。 –

答えて

0

<context:annotation-config/>の追加により、M. Deinumの回答により私の問題が解決されました。

これが他の人に役立つ場合は、インポートに問題があり、javax.persistence.Entityの代わりに org.hibernate.annotations.Entityをインポートしていました。

関連する問題