Hola que tal, estoy tratando de empezar con Spring, y para ello he decidido hacer una pequeña aplicacion swing que me permita leer datos de una base de datos.

Tengo 2 elementos, una interfaz y una clase que implementa la interfaz, en la clase quiero que se le inyecte un EntityManager de JPA, pero cuando ejecuto algun metodo de la clase, la variable usada para el EntityManager (em) es null, lo que significa que la inyeccion de esa dependencia no se realiza.

Estoy siguiendo algunos tutoriales y se menciona que es suficiente con la anotacion Repository en la clase JpaDao, para que el EntityManager sea inyectado, aunque yo de eso no estoy seguro, no se si es necesario hacer algo mas. Cual puede ser el problema? o que me esta haciendo falta?

 

copio al final parte del applicationContext.xml que uso para Spring.

 

@Repository

public class JpaDao implements Dao{

   private EntityManager em;

   public EntityManager getEm() {

      return em;

   }

   @PersistenceContext

   public void setEm(EntityManager em) {

      this.em = em;

   }

}

 

applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       ...

          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

 

   <context:annotation-config/>

   <context:component-scan base-package="conta"/>

 

    <!-- archivo de configuracion para los datos de conexion -->

    <bean id="propertyConfigurer"

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="location" value="classpath:jdbc.properties" />

    </bean>

 

   <bean id="entityManagerFactory"

      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

      <property name="dataSource" ref="dataSource"/>

      <property name="jpaVendorAdapter">

         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">

            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect"/>

            <property name="showSql" value="true"/>

            <property name="generateDdl" value="false"/>

         </bean>

      </property>

      <property name="persistenceUnitName" value="Conta"/>

   </bean>

   <bean id="dataSource"

        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="${jdbc.driverClassName}" />

        <property name="url" value="${jdbc.url}" />

        <property name="username" value="${jdbc.username}" />

        <property name="password" value="${jdbc.password}" />  

    </bean>

     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

       <property name="entityManagerFactory" ref="entityManagerFactory" />

     </bean>

</beans>

 

 

 

 Intenta usar anotaciones de Spring como @Autowired y usar el soporte de DAO's para Spring y JPA, es decir JpaDaoSupport...