最初在我们的项目中,我们使用的是 spring 3 + hibernate 3 最近已决定升级 3rd 方 jar,作为 spring 升级到 4 但不是 hibernate 的一部分(仍然保持 hibernate 3)。现在我们没有为 spring 4 升级更改任何代码,当我们执行项目时 LocalContainerEntityManagerFactoryBean 注入失败。我在下面给出了上下文文件声明和错误堆栈跟踪。现在的问题是如何在不升级hibernate的情况下让现有项目在spring 4上运行。
使用 Spring ORM 4.1.6 LocalContainerEntityManagerFactoryBean 正在尝试加载 JPA 2.0 特定的休眠导入(即休眠 4 jar 类)并失败。
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
<property name="persistenceUnitName" value="casp-portal"/>
</bean>
<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!-- enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
错误堆栈跟踪
原因:org.springframework.beans.factory.BeanCreationException:在类路径资源 [applicationContext-securityEJB-DBtest.xml] 中定义名称为“entityManagerFactory”的 bean 创建错误:bean 类型 [class org.springframework.orm] 的后处理失败.jpa.LocalContainerEntityManagerFactoryBean] 失败;嵌套异常是 java.lang.IllegalStateException:无法自省 bean 类 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] 的持久性元数据:在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 找不到它依赖的类。 applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:936) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。