Spring DaoSupport 和@PersistanceContext EntityManager?

Posted

技术标签:

【中文标题】Spring DaoSupport 和@PersistanceContext EntityManager?【英文标题】:Spring DaoSupport and @PersistanceContext EntityManager? 【发布时间】:2010-11-09 21:01:30 【问题描述】:

理解 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?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

您可以从官方博客this post获取有关此主题的更多信息

【讨论】:

我了解如何注入 EntityManager,我可以正常工作。我的问题更多是关于 Spring DAO 的最佳实践。 我认为,如果您将 JPA 用作标准方法,那么强迫您使用 Spring 解决方案(即扩展 JpaSupport)是没有意义的。如果您继续使用 JPA+EJB3 注入,您可以随时将您的 jar 迁移到应用程序服务器。我的 2 微分 :)【参考方案3】:

我宁愿建议你不要扩展 JpaDaoSupport,spring 会为你做一切。按照 diega 建议的链接获取更多信息,我遵循的同一博客升级我的应用程序以支持 spring - jpa。

【讨论】:

以上是关于Spring DaoSupport 和@PersistanceContext EntityManager?的主要内容,如果未能解决你的问题,请参考以下文章

不能将 resultSet.setFetchDirection(ResultSet.TYPE_SCROLL_SENSITIVE) 与 spring jdbc DaoSupport 与 Oracle 一

页面获取不到spring实例化services解决方法

实战3--设计管理模块,整合!!!

使用Spring BOOT集成测试JPA存储库时的NoSuchMethodError(getMetaModel)

在安装 ESXi 时发现一个问题。 报错的内容:cpu1:2658 Logs are stored on non-persi

使用带有 MySQL 数据库的 Spring Boot Rest API 的一对一映射