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 策略的支持(HibernateDaoSupport、JdbcDaoSupport、TopLinkDaoSupport 等)。在这些情况下,基于注释的注入不是一种选择。
【讨论】:
【参考方案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 BOOT集成测试JPA存储库时的NoSuchMethodError(getMetaModel)
在安装 ESXi 时发现一个问题。 报错的内容:cpu1:2658 Logs are stored on non-persi