我们目前已经配置并运行了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及其配置设置还不熟悉。
答案 0 :(得分:2)
AbstractDAO
迁移到EntityManager
API并在注入点(通常是设置者)上使用@PersistenceContext
。<context:annotation-config />
启用注释配置或配置PersistenceAnnotationBeanPostProcessor
以启用将EntityManager
注入DAO。你可以完全摆脱AbstractDAO
的bean定义。请注意,如果您已在某处激活<context:component-scan />
,则此功能应该已经开箱即用。PS:如果你正在迁移,你可能想要立即升级到Spring 4.2。如果这不是一个选项,请使用最新的Spring 4.1版本(撰写本文时为4.1.7)。