如何将JpaTemplate的使用从Spring 3.2迁移到4.1.4?

时间:2015-08-10 16:56:02

标签: spring jpa spring-4

我们目前已经配置并运行了Spring 3.2.9.RELEASE(连续几年),需要迁移到4.1.4.RELEASE。我们有一个抽象的DAO类,它扩展了org.springframework.orm.jpa.support.JpaDaoSupport以及其他对:

的引用
  • org.springframework.orm.jpa.JpaCallback
  • org.springframework.orm.jpa.JpaTemplate

我已经看到{4}已在Spring 4中被移除了。我已经删除了对Jpa *类的引用并替换为

JpaDaoSupport

以及@PersistenceContext protected EntityManager theEntityManager; 中找到的DAO中的方法引用(如findByNamedParams()),并复制到我们的DAO中。

经过上述更改后,我们可以编译代码,但是在运行JUnit测试时,我们的JpaDaoSupport中有一个引用

applicationContext-test.xml

基本上错误是没有<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <bean id="abstractDAO" abstract="true" class="my.company.package.AbstractDAO"> <property name="jpaTemplate" ref="jpaTemplate" /> </bean> <bean id="genericDAO" parent="abstractDAO" class="my.company.package.GenericDAO" /> <bean id="securityDAO" parent="abstractDAO" class="my.company.package.SecurityDAOImpl" /> 的类引用。我们如何替换Spring 4.1.4的这个org.springframework.orm.jpa.JpaTemplate配置?

请注意,我选择此代码并且不是最初配置系统的人。另外,我对Spring及其配置设置还不熟悉。

1 个答案:

答案 0 :(得分:2)

  1. 确保将AbstractDAO迁移到EntityManager API并在注入点(通常是设置者)上使用@PersistenceContext
  2. 使用<context:annotation-config />启用注释配置或配置PersistenceAnnotationBeanPostProcessor以启用将EntityManager注入DAO。你可以完全摆脱AbstractDAO的bean定义。请注意,如果您已在某处激活<context:component-scan />,则此功能应该已经开箱即用。
  3. PS:如果你正在迁移,你可能想要立即升级到Spring 4.2。如果这不是一个选项,请使用最新的Spring 4.1版本(撰写本文时为4.1.7)。