You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring整合Hibernate时AnnotationSessionFactoryBean实例化失败求助

搞定Spring+Hibernate启动时的AnnotationSessionFactoryBean实例化异常

Hey,我看了你遇到的问题——Spring 3.2 CR4搭配Hibernate 5.3.1启动时,死活实例不了AnnotationSessionFactoryBean,核心是找不到org.hibernate.cfg.AnnotationConfiguration类对吧?咱们一步步来梳理:

你提供的报错日志

主线程异常:org.springframework.beans.factory.BeanCreationException:创建类路径资源[resouce/springXML.xml]中定义的名称为'sf'的Bean失败;Bean实例化失败;嵌套异常为org.springframework.beans.BeanInstantiationException:无法实例化Bean类[org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]:构造函数抛出异常;嵌套异常为java.lang.NoClassDefFoundError:org/hibernate/cfg/AnnotationConfiguration

详细日志:
2020年1月19日 下午6:44:42 org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO:刷新org.springframework.context.support.ClassPathXmlApplicationContext@ad9418:启动时间[Sun Jan 19 18:44:42 IST 2020];上下文层次结构的根
2020年1月19日 下午6:44:42 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO:从类路径资源[resouce/springXML.xml]加载XML Bean定义
2020年1月19日 下午6:44:43 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO:在org.springframework.beans.factory.support.DefaultListableBeanFactory@18e2867中预实例化单例:定义的Bean为[bds,sf,ht,dao];工厂层次结构的根
2020年1月19日 下午6:44:43 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons INFO:销毁org.springframework.beans.factory.support.DefaultListableBeanFactory@18e2867中的单例:定义的Bean为[bds,sf,ht,dao];工厂层次结构的根

完整异常栈信息:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in class path resource [resouce/springXML.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:946)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:892)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at test.client.main(client.java:15)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:72)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:939)
... 13 more
Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration
at org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean.<init>(AnnotationSessionFactoryBean.java:99)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
... 15 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.AnnotationConfiguration
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 21 more

你的Spring配置文件

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
 <bean id="bds" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
 <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
 <property name="username" value="rayudu"/>
 <property name="password" value="oracle10g"/>
 <property name="maxActive" value="15"/>
 <property name="maxIdle" value="5"/>
 <property name="maxWait" value="5000"/>
 </bean>
 <bean id="sf" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 <property name="dataSource" ref="bds"/>
 <property name="hibernateProperties">
 <props>
 <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
 <prop key="hibernate.hbm2ddl.auto">create</prop>
 <prop key="hibernate.show_sql">true</prop>
 </props>
 </property>
 <property name="annotatedClasses">
 <list>
 <value>model.Student</value>
 </list>
 </property>
 </bean>
 <bean id="ht" class="org.springframework.orm.hibernate3.HibernateTemplate">
 <property name="sessionFactory" ref="sf"/>
 </bean>
 <bean id="dao" class="dap.StudentDAOImp">
 <property name="ht" ref="ht"/>
 </bean>
</beans>

问题根源

说白了就是版本不兼容:

  • 你用的org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean是Spring为Hibernate 3.x专门做的整合类,它依赖Hibernate 3里的org.hibernate.cfg.AnnotationConfiguration类。
  • 但你实际引入的是Hibernate 5.3.1,从Hibernate 4.x开始,AnnotationConfiguration就被干掉了——注解功能直接合并到了org.hibernate.cfg.Configuration里,自然找不到这个类。

两种解决方案任你选

方案1:版本匹配(最简单,推荐)

既然用了Spring 3.2,那就乖乖搭配Hibernate 3.x版本(比如Hibernate 3.6.10.Final):

  1. 把项目里的Hibernate 5.x依赖全部换成3.x版本,记得要包含hibernate-annotations.jar(Hibernate 3里注解功能单独在这个包)。
  2. 你的Spring配置完全不用改,直接启动就能跑。

方案2:升级Spring适配Hibernate 5(适合想保留新Hibernate版本的情况)

如果你不想换掉Hibernate 5,那得升级Spring到支持Hibernate 5的版本(至少Spring 4.2+,推荐4.3.x或5.x),同时修改配置:

  1. 升级Spring所有依赖到4.2及以上,确保引入spring-orm模块。
  2. 把SessionFactory的Bean类换成Hibernate 5对应的整合类org.springframework.orm.hibernate5.LocalSessionFactoryBean,配置逻辑差不多,但不需要专门的注解类了(Hibernate 5默认支持注解):
<bean id="sf" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
 <property name="dataSource" ref="bds"/>
 <property name="hibernateProperties">
 <props>
 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</prop> <!-- 可以根据你的Oracle版本调整 -->
 <prop key="hibernate.hbm2ddl.auto">create</prop>
 <prop key="hibernate.show_sql">true</prop>
 </props>
 </property>
 <property name="annotatedClasses">
 <list>
 <value>model.Student</value>
 </list>
 </property>
</bean>
  1. 对应的HibernateTemplate也要换成Hibernate 5版本的:org.springframework.orm.hibernate5.HibernateTemplate。

额外注意点

  • 别同时把Hibernate 3和5的Jar包放进项目,不然会出现依赖冲突,问题更麻烦。
  • 用Maven/Gradle的话,一定要确保所有相关依赖的版本统一,避免出现隐性的版本不一致。

内容的提问来源于stack exchange,提问作者rayudu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:19:06