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

Spring+Hibernate项目Bean创建失败问题求助(NetBeans8.2、Spring3.2.7、Hibernate4.3.x环境)

解决Spring+Hibernate Bean创建失败及NoClassDefFoundError问题

嘿,我来帮你搞定这个问题!咱们先从最底层的错误信息入手——java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider,这核心原因是你的Spring配置和代码用的是适配Hibernate 3的类,但实际引入的是Hibernate 4.3.x,两者不兼容。

Hibernate 4.x已经移除了CacheProvider这个接口,而你用的org.springframework.orm.hibernate3.LocalSessionFactoryBean和org.springframework.orm.hibernate3.HibernateTemplate都是Spring专门给Hibernate 3做的适配类,和Hibernate 4搭不上,所以才会出现找不到类的错误。

下面是具体的修复步骤:

1. 替换Spring配置里的Hibernate适配类

打开你的applicationContext.xml,把两个关键的bean类换成Hibernate 4版本的:

  • 将org.springframework.orm.hibernate3.LocalSessionFactoryBean改成org.springframework.orm.hibernate4.LocalSessionFactoryBean
  • 将org.springframework.orm.hibernate3.HibernateTemplate改成org.springframework.orm.hibernate4.HibernateTemplate

修改后的完整配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/kampus"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>
<bean id="mysessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>Mahasiswa.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="template" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="mysessionFactory"></property>
</bean>
<bean id="dao" class="dao.MahasiswaDao">
<property name="template" ref="template"></property>
</bean>
</beans>

2. 修改Dao类的导入包

打开MahasiswaDao.java,把HibernateTemplate的导入路径换成Hibernate 4的版本:

package dao;
import entity.Mahasiswa;
import org.springframework.orm.hibernate4.HibernateTemplate; // 这里替换成hibernate4的包
public class MahasiswaDao {
    HibernateTemplate template;
    public void setTemplate(HibernateTemplate template) {
        this.template = template;
    }
    public void saveMahasiswa(Mahasiswa m){
        template.save(m);
    }
}

3. 确认依赖包完整性

检查你的项目依赖,确保已经包含:

  • Spring 3.2.7的spring-orm包(这个包里包含了Hibernate 4的适配类)
  • Hibernate 4.3.x的核心包:hibernate-core、hibernate-commons-annotations、hibernate-jpa-2.1-api等
  • MySQL的JDBC驱动包(mysql-connector-java)

如果用的是Maven或者Gradle,要确保这些依赖都正确引入;如果是手动加的jar包,检查有没有遗漏。

4. (可选)优化主类的Spring API使用

你的主类里用的XmlBeanFactory在Spring 3.2.x里已经过时了,建议换成更常用的ClassPathXmlApplicationContext,代码更规范:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test06 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        MahasiswaDao dao = (MahasiswaDao) context.getBean("dao");
        Mahasiswa m = new Mahasiswa();
        m.setNpm("1");
        m.setNama("test");
        m.setJurusan("");
        m.setAlamat("");
        dao.saveMahasiswa(m);
    }
}

最后验证

完成所有修改后,重新编译运行项目,应该就能顺利创建Bean并执行数据库操作了。


内容的提问来源于stack exchange,提问作者Muhamad Rizki Nugroho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:32:37