2009-07-10 14 views
4

L'une des choses les plus difficiles à comprendre à propos de Spring est que Spring prend en charge plusieurs approches pour le même problème.Spring DaoSupport et @PersistanceContext EntityManager?

donc dans ma demande que j'utilise injecté EntityManager en utilisant l'annotation @PersistanceContext, par exemple:

@Repository 
public class JpaDao extends JpaDaoSupport implements Dao { 

    @PersistenceContext(unitName = "PersistanceUnit", type = PersistenceContextType.EXTENDED) 
    private EntityManager em; 

Cette approche est compatible avec extension JpaDaoSupport (qui nécessite l'injection dans un EntityManager)? Pour moi, cela ressemble à deux approches incompatibles avec la résolution du même problème, mais j'aimerais avoir quelques conseils de quelqu'un qui a plus d'expérience avec Spring.

Si je ne devais pas étendre JpaDaoSupport, comment dois-je construire mon DAO en utilisant l'approche @PersistenceContext?

Répondre

4

Vous avez raison de dire qu'ils sont deux différents approches au même problème. Lequel est «meilleur» est une question de goût, je pense. L'utilisation d'annotations a l'avantage d'éviter les dépendances d'importation Spring dans votre code, et même le JavaDoc de Spring pour JpaDaoSupport suggère de les utiliser pour de nouveaux projets JPA. JpaDaoSupport est là pour le soutien de printemps pour JPA équivalent à son soutien à d'autres stratégies ORM (HibernateDaoSupport, JdbcDaoSupport, TopLinkDaoSupport, etc.). Dans ces cas, l'injection basée sur des annotations n'est pas une option.

1

Pour l'injection du EntityManager il vous suffit d'ajouter la définition suivante

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

vous pouvez obtenir plus d'informations sur ce sujet this post du blog oficial

+0

Je comprends comment injecter l'EntityManager, j'ai cela fonctionne très bien. Mon problème est plus sur les meilleures pratiques pour Spring DAO. –

+2

Je pense que si vous utilisez JPA en tant qu'approche standard, vous forcer à utiliser une solution Spring (c'est-à-dire étendre JpaSupport) n'a aucun sens. Si vous restez lié à l'injection JPA + EJB3, vous pouvez migrer vos fichiers jars vers un serveur d'applications quand vous le souhaitez. Mes 2 cents cents :) – diega

0

Je vous recommande de ne pas étendre JpaDaoSupport, le printemps fera tout pour vous. Suivez le lien suggéré par diega pour plus d'informations, même blog que j'ai suivi pour mettre à jour mon application pour soutenir spring - jpa.