Spring DaoSupport和@PersistanceContext EntityManager?

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

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

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

  

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

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