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

Spring MVC中创建Hibernate SessionFactory时出现NoClassDefFoundError求助

解决Spring MVC+Hibernate中SessionFactory创建失败的NoClassDefFoundError问题

问题描述

在配置Spring MVC整合Hibernate的SessionFactory时,遇到了上下文初始化异常,具体错误信息如下:

上下文初始化过程中遭遇异常,取消刷新操作:org.springframework.beans.factory.BeanCreationException: 创建ServletContext资源[/WEB-INF/spring-mvc-crud-demo-servlet.xml]中定义的名为'sessionFactory'的Bean失败;初始化方法调用失败;嵌套异常为java.lang.NoClassDefFoundError: net/bytebuddy/NamingStrategy$SuffixingRandom$BaseNameResolver。

对应的Spring配置文件代码如下:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- Add support for component scanning -->
    <context:component-scan base-package="com" />
    <!-- Add support for conversion, formatting and validation support -->
    <mvc:annotation-driven/>
    <!-- Define Spring MVC view resolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <!-- Step 1: Define Database DataSource / connection pool -->
    <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&amp;serverTimezone=UTC" />
        <property name="user" value="root" />
        <property name="password" value="DeepMYSQL9046!@" />
        <!-- these are connection pool properties for C3P0 -->
        <property name="initialPoolSize" value="5"/>
        <property name="minPoolSize" value="5" />
        <property name="maxPoolSize" value="20" />
        <property name="maxIdleTime" value="30000" />
    </bean>
    <!-- Step 2: Setup Hibernate session factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="packagesToScan" value="com" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate5.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate5.show_sql">true</prop>
            </props>
        </property>
    </bean>
    <!-- Step 3: Setup Hibernate transaction manager -->
    <bean id="myTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- Step 4: Enable configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="myTransactionManager" />
    <!-- Add support for reading web resources: css, images, js, etc ... -->
    <mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>
</beans>

错误原因分析

  1. ByteBuddy依赖缺失:报错里的java.lang.NoClassDefFoundError指向ByteBuddy的类,说明项目里没引入这个依赖。Hibernate 5及以上版本依赖ByteBuddy做字节码增强,必须要加这个包才能正常初始化SessionFactory。
  2. Hibernate配置键错误:你配置里把Hibernate的属性键写成了hibernate5.dialect和hibernate5.show_sql,正确的键应该是hibernate.dialect和hibernate.show_sql,多出来的5会导致Hibernate识别不了这些配置,间接影响初始化。
  3. 方言版本不匹配:你用的是MySQL 8.x的驱动com.mysql.cj.jdbc.Driver,但配置的方言是旧版的MySQLDialect,这也可能引发兼容性问题。

解决方案

1. 补充ByteBuddy依赖

如果用Maven,直接在pom.xml里加这段依赖:

<dependency>
    <groupId>net.bytebuddy</groupId>
    <artifactId>byte-buddy</artifactId>
    <version>1.10.19</version> <!-- 选和你Hibernate版本兼容的稳定版即可 -->
</dependency>

要是手动管理jar包,就下载ByteBuddy的jar文件放到项目的WEB-INF/lib目录下。

2. 修正Hibernate配置属性

修改sessionFactory里的hibernateProperties部分,把属性键的hibernate5改成hibernate,同时替换成适配MySQL 8的方言:

<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
        <prop key="hibernate.show_sql">true</prop>
    </props>
</property>

3. 检查其他依赖完整性

确保项目里已经包含Hibernate 5核心依赖、Spring ORM依赖以及C3P0连接池的完整jar包,避免其他依赖缺失拖后腿。

做完这些操作后,重新部署项目,应该就能顺利初始化SessionFactory了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:48