了解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?
答案 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。