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

使用Kotlin时Quarkus+Hibernate Panache抛出NoSuchFieldError问题求助

解决Quarkus Kotlin项目启动Hibernate配置阶段的NoSuchFieldError(BEFORE_TRANSACTION_COMPLETION)问题
  • 检查依赖版本一致性

    • 用mvn dependency:tree生成依赖树,确认Quarkus 3.9.4对应的Hibernate ORM版本(应为6.4.x)未被其他依赖覆盖。如果发现旧版hibernate-core被引入,在pom.xml中强制指定与Quarkus匹配的版本,避免版本冲突导致枚举类缺失。
    • 确保Kotlin相关依赖(kotlin-stdlib、kotlin-jpa等)版本与Quarkus 3.9.4兼容,推荐使用1.9.x系列的Kotlin版本,版本不匹配可能引发类加载异常。
  • 排查程序化数据源配置代码

    • 检查PersistenceUnitExtension中是否手动配置了Hibernate事务回调相关属性,确认属性名和枚举引用完全正确,避免因拼写错误或引用了Hibernate内部已废弃/不存在的枚举值触发错误。
    • 注意Kotlin与Java对枚举类的访问差异,确保代码中引用的BEFORE_TRANSACTION_COMPLETION枚举所在类路径正确,且该枚举在当前依赖版本中存在。
  • 验证JPA实体类转换正确性

    • 检查Java转Kotlin后的实体类,确认@PreUpdate、@PrePersist等生命周期注解的方法实现符合JPA要求,比如方法访问修饰符不能为private,必要时添加open关键字或@JvmOverloads注解。
    • 排查实体类中自定义的事务回调逻辑,错误的实现可能导致Hibernate加载枚举类时出现异常。
  • 确认Quarkus扩展兼容性

    • 保证quarkus-agroal和quarkus-hibernate-orm的版本与Quarkus核心版本(3.9.4)完全一致,扩展版本不兼容会引发内部API调用错误。
    • 检查Azure密钥保管库相关扩展(如quarkus-azure-keyvault-secrets)的版本是否与Quarkus核心版本对齐,避免依赖冲突。
  • 调试类加载问题

    • 添加JVM启动参数-verbose:class,查看BEFORE_TRANSACTION_COMPLETION枚举所在类的加载来源,确认是否是正确版本的Hibernate类被加载,而非被旧版本依赖覆盖。
    • 执行mvn dependency:analyze检查未使用或冲突的依赖,清理冗余依赖项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:55:53