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

Spring集成Hibernate项目java.lang.NoClassDefFoundError问题如何解决

问题根因与解决方案

第一个错误(java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup)

  • 根本原因:Spring各模块版本不匹配,你的pom中spring-context版本为5.3.9,而spring-core、spring-beans版本为5.2.16,ApplicationStartup类是Spring 5.3.0版本才新增的类,低版本的spring-core中不存在该类,因此高版本的spring-context调用时会抛出类不存在错误。

第二个错误(统一Spring版本为5.2.16后出现BeanDefinitionStoreException: Failed to read candidate component class)

  • 有三个核心诱因:
    1. 实体类testTable的getId方法不符合JPA规范:你定义的getId方法携带了多余的参数public Long getId(Long id),JPA要求实体的getter方法必须是无参方法,Spring扫描类元数据时会因反射解析失败报错。
    2. Spring 5.2.x系列最高仅支持JDK 15,你配置的编译版本为JDK 16,版本不兼容会导致类读取失败。
    3. 你统一版本时遗漏了spring-context的版本,仅修改了spring-core、spring-jdbc、spring-orm的版本,spring-context仍为5.3.9,版本冲突未完全解决。

具体修复步骤

  1. 统一所有Spring依赖版本并适配JDK 16
    推荐使用Spring 5.3.x系列(支持JDK 16+),在pom.xml中添加统一版本属性,所有Spring相关依赖都引用该属性:
<properties>
    <spring.version>5.3.20</spring.version>
    <maven.compiler.source>16</maven.compiler.source>
    <maven.compiler.target>16</maven.compiler.target>
</properties>

对应修改所有Spring依赖的version标签:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
  1. 升级hibernate-core版本适配Spring 5.3.x
    替换原有hibernate-core依赖:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.32.Final</version>
</dependency>
  1. 修复实体类的getter方法错误
    修改testTable类的getId方法为无参:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Long getId() {
    return id;
}
  1. 修正SessionFactory配置的包扫描路径
    将sessionFactory方法中setPackagesToScan的参数改为点分隔的标准包名:
sessionFactoryBean.setPackagesToScan("com.my.jdbcTest.Enties");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:48:02