4

理解 Spring 最困难的事情之一是 Spring 支持解决同一问题的多种方法。

因此,在我的应用程序中,我使用 @PersistanceContext 注释注入了 EntityManager,例如:

@Repository
public class JpaDao extends JpaDaoSupport implements Dao {

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

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

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

4

3 回答 3

4

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

于 2009-07-15T15:27:22.597 回答
1

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

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

您可以从官方博客的这篇文章中获得有关此主题的更多信息

于 2009-07-11T05:48:17.993 回答
0

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.

于 2013-07-07T07:58:13.747 回答