Question

One of the most difficult things about understand Spring is that Spring supports multiple approaches to the same problem.

So in my application I using injected EntityManager using the @PersistanceContext annotation, for example:

@Repository
public class JpaDao extends JpaDaoSupport implements Dao {

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

Is this approach compatible with extending JpaDaoSupport (which requires injecting in an EntityManager)? To me it looks like two incompatible approaches to the solving the same problem, but I would like some advice from someone who has more experience with Spring.

If I shouldn't be extending JpaDaoSupport, how should I build my DAO using the @PersistenceContext approach?

Was it helpful?

Solution

You're correct that they are two different approaches to the same problem. Which one is "better" is a matter of taste, I think. Using annotations has the benefit of avoiding Spring import dependencies in your code, and even the Spring JavaDoc for JpaDaoSupport suggests using them for new JPA projects. JpaDaoSupport is there to make Spring's support for JPA equivalent to its support for other ORM strategies (HibernateDaoSupport, JdbcDaoSupport, TopLinkDaoSupport, etc.). In those cases, annotation-based injection isn't an option.

OTHER TIPS

For injecting the EntityManager you just need to add the next definition

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

you can get more information about this topic in this post from the oficial blog

I would rather recommend you not to extend JpaDaoSupport, spring will do everything for you. Follow the link suggested by diega for more information, same blog I have followed to upgrade my application to support spring - jpa.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top