2010-03-10 11 views
36

Tengo algunas preguntas sobre la integración de JPA + Spring ejecutándose en Tomcat. He estado buscando algo de tiempo y no he podido encontrar ninguna respuesta concreta, así que aquí va:Cómo inyectar JPA EntityManager utilizando la primavera

¿Es posible que Spring inyecte el objeto JPA entityManager en mi clase DAO sin extender JpaDaoSupport? En caso afirmativo, ¿Spring gestiona la transacción en este caso?

que estoy tratando de mantener mi configuración de Spring lo más simple posible:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="em"/> 
</bean> 
<bean id="em" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myPU"/> 
</bean> 

EDIT: que era muy servicial, gracias a todos!

Respuesta

29

Sí, aunque está lleno de errores, ya que JPA es un poco peculiar. Es muy mucho la pena leer la documentación en la inyección de APP EntityManager y EntityManagerFactory, sin dependencias de primavera explícitas en su código:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa

Esto le permite ya sea inyecta el EntityManagerFactory, o de lo contrario se inyecta una, delegación transaccional seguro para subprocesos de un EntityManager directamente. Esto último hace que el código sea más simple, pero significa que se requieren más tuberías de Spring.

12

¿Es posible tener un muelle para inyectar el objeto JPA entityManager en mi clase DAO sin extender JpaDaoSupport? En caso afirmativo, ¿la primavera administra la transacción en este caso?

Esto está documentado en negro sobre blanco 12.6.3. Implementing DAOs based on plain JPA:

Es posible escribir código contra la llanura de la APP sin utilizar ningún primavera dependencias, utilizando un inyectada EntityManagerFactory o EntityManager. Tenga en cuenta que la primavera puede entender @PersistenceUnit y @PersistenceContext anotaciones ambos en el campo ya nivel de método si un PersistenceAnnotationBeanPostProcessor está habilitado. Una aplicación DAO correspondiente podría tener este aspecto (...)

Y con respecto a la gestión de transacciones, echar un vistazo a 12.7. Transaction Management:

primavera JPA permite una JpaTransactionManager configurado para exponer una transacción APP que JDBC código de acceso que accede al mismo JDBC DataSource, siempre que el JpaDialect registrado admita la recuperación de la conexión JDBC subyacente. Fuera de la caja, Spring proporciona dialectos para las implementaciones Toplink, Hibernate y OpenJPA JPA. Consulte la siguiente sección para obtener detalles sobre el mecanismo JpaDialect.

3

Las versiones más recientes de Spring + JPA resuelven este problema fundamentalmente. Puede obtener más información sobre cómo usar Spring y JPA togather en a separate thread

Cuestiones relacionadas