Spring DaoSupport和@PersistanceContext EntityManager?

时间:2009-07-10 21:49:07

标签: java spring jpa persistence dao

了解Spring最困难的一点是,Spring支持针对同一问题的多种方法。

所以在我的应用程序中,我使用注入的EntityManager使用@PersistanceContext注释,例如:

@Repository
public class JpaDao extends JpaDaoSupport implements Dao {

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

此方法是否与扩展JpaDaoSupport 兼容(需要在EntityManager中注入)?对我来说,它似乎是解决相同问题的两种不兼容的方法,但我想从一些对Spring有更多经验的人那里得到一些建议。

如果我不应该扩展JpaDaoSupport,我应该如何使用@PersistenceContext方法构建我的DAO?

3 个答案:

答案 0 :(得分:4)

你是对的,他们是解决同一问题的两种不同方法。我认为哪一个“更好”是一个品味问题。使用注释有利于避免代码中的Spring导入依赖性,甚至用于 JpaDaoSupport 的Spring JavaDoc建议将它们用于新的JPA项目。 JpaDaoSupport 是否会使Spring对JPA的支持等同于对其他ORM策略的支持( HibernateDaoSupport JdbcDaoSupport TopLinkDaoSupport ,等)。在这些情况下,基于注释的注射不是一种选择。

答案 1 :(得分:1)

要注入EntityManager,您只需添加下一个定义

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

您可以从官方博客

中的this post获取有关此主题的更多信息

答案 2 :(得分:0)

我宁愿建议你不要延长JpaDaoSupport,春天会为你做一切。按照diega建议的链接获取更多信息,我跟随的同一个博客升级我的应用程序以支持spring-jpa。