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

Kotlin项目集成Hibernate 6时出现NoClassDefFoundError问题求助

解决Hibernate 6集成Kotlin项目时的NoClassDefFoundError错误

错误原因

java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager 通常由以下场景引发:

  • Hibernate 6.x 全模块已统一使用 org.hibernate.orm 作为groupId,若引入旧groupId(如org.hibernate)的hibernate-commons-annotations会导致依赖不兼容
  • Gradle缓存了过时的依赖,导致目标类无法正常加载
  • 项目中存在不同版本的Hibernate依赖冲突

解决方案

1. 规范Hibernate依赖配置

Hibernate 6.x 的hibernate-core已自动包含兼容的hibernate-commons-annotations版本,无需单独引入。需确保所有Hibernate相关依赖使用统一的org.hibernate.orm groupId和一致版本:

dependencies {
    // 核心Hibernate依赖
    implementation("org.hibernate.orm:hibernate-core:6.3.1.Final")
    // 如需社区方言,同样使用org.hibernate.orm groupId
    // implementation("org.hibernate.orm:hibernate-community-dialects:6.3.1.Final")
}

2. 清理Gradle缓存并重建项目

执行以下命令清理缓存、刷新依赖并重新构建:

./gradlew clean build --refresh-dependencies

3. 排查并解决依赖冲突

运行命令查看项目完整依赖树,检查是否有旧版本Hibernate依赖被第三方库引入:

./gradlew dependencies

若发现冲突(如其他依赖引入了org.hibernate:hibernate-commons-annotations旧版本),可通过exclude排除冲突依赖:

implementation("第三方依赖组:第三方依赖名:版本") {
    exclude(group = "org.hibernate", module = "hibernate-commons-annotations")
}

4. 优化SessionFactory初始化代码

Hibernate 6推荐使用新的初始化方式(旧API仍兼容),可调整代码如下:

fun main() {
    val sessionFactory = SessionFactoryBuilder()
        .applySettings(StandardServiceRegistryBuilder().configure().build())
        .addAnnotatedClass(Account::class.java)
        .build()
    
    sessionFactory.openSession().use { session ->
        session.beginTransaction()
        session.persist(Account(829707526215172136L, 639095276619169813L, 1337))
        session.transaction.commit()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:13:25