2016-05-19 7 views
1

Frühling und Winterschlaf sind beide neue Werkzeuge für mich und ich kämpfe ein bisschen mit beiden gleichzeitig.Bean-Eigenschaft 'entityManager' ist nicht beschreibbar oder hat eine ungültige Setter-Methode (mit Spring und 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:

<persistence-unit name="SUPERVISION-1.0"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>supervision.dao.SupervisionDbObject</class> 
</persistence-unit> 

über JDBC, kann meine Datasource instanziiert werden und ist voll funktionsfähig, aber Mit Hibernate und dem EntityManager erhalte ich nur einen Fehler:

Ich habe versucht, stattdessen das EntityManagerFactory-Objekt zu verwenden, aber derselbe Fehler tritt auf.

Kann mir jemand helfen?

+1

Ihr 'setEntityManager' ist' protected'. Sie sollten es jedoch entfernen und den @ PersistenceContext ausführen lassen. Stellen Sie sicher, dass Sie ein '' in Ihrer Konfiguration haben. –

+0

Benötige ich wirklich das wenn ich schon eine Bean wie den PersistenceAnnotationBeanPostProcessor habe? (Hinzugefügt in op) – warzag

+0

Nein, Sie tun nicht, aber das '' tut mehr als nur die 'PersistenceAnnotationBeanPostProcessor' (wie' @ Autowired'). –

Antwort

0

Die Ergänzung der <context:annotation-config/> behoben mein Problem dank M. Deinum Antwort.

Wenn dies jemand anderem helfen kann, hatte ich auch ein Problem mit einem Import, ich importierte org.hibernate.annotations.Entity statt javax.persistence.Entity.