2010-03-10 5 views
36

J'ai quelques questions sur l'intégration de JPA + Spring en cours d'exécution sur Tomcat. J'ai cherché pendant un certain temps et n'ai pas été capable de trouver une réponse concrète, alors voilà:Comment injecter JPA EntityManager en utilisant le ressort

Est-il possible que Spring injecte l'objet JPA entityManager dans ma classe DAO sans étendre JpaDaoSupport? Si oui, Spring gère-t-elle la transaction dans ce cas?

J'essaie de garder ma configuration de printemps aussi simple que possible:

<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: qui était très utile, merci à vous tous!

Répondre

29

Oui, bien qu'il soit plein de trucs, car JPA est un peu particulier. Il est très utile de lire la documentation sur l'injection JPA EntityManager et EntityManagerFactory, sans explicites dépendances de printemps dans votre code:

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

Cela vous permet soit d'injecter le EntityManagerFactory, injectez encore un thread-safe, proxy transactionnel d'un EntityManager directement. Ce dernier fait pour le code plus simple, mais signifie plus de plomberie de printemps est nécessaire.

12

Est-il possible d'avoir un ressort pour injecter l'objet JPA entityManager dans ma classe DAO sans étendre JpaDaoSupport? Si oui, le printemps gère-t-il la transaction dans ce cas?

Ceci est documenté noir sur blanc dans 12.6.3. Implementing DAOs based on plain JPA:

Il est possible d'écrire du code contre l'Assemblée parlementaire paritaire ordinaire sans utiliser Spring dépendances, à l'aide d'une injection EntityManagerFactory ou EntityManager. Notez que Spring peut comprendre @PersistenceUnit et @PersistenceContext annotations deux au terrain et au niveau de la méthode si un PersistenceAnnotationBeanPostProcessor est activée. Une DAO mise en œuvre correspondante pourrait ressembler à ceci (...)

Et en ce qui concerne la gestion des transactions, ont un oeil à 12.7. Transaction Management:

Spring JPA permet une configuration JpaTransactionManager pour exposer une transaction JPA à JDBC code d'accès qui accède à la même source de données JDBC, à condition que le JpaDialect enregistré prenne en charge la récupération de la connexion JDBC sous-jacente. Prêt à l'emploi, Spring fournit des dialectes pour les implémentations JPA Toplink, Hibernate et OpenJPA. Voir la section suivante pour plus de détails sur le mécanisme JpaDialect.

3

Les dernières versions Spring + JPA résolvent ce problème fondamentalement. Vous pouvez en apprendre plus comment utiliser Spring et JPA togather dans a separate thread

Questions connexes