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

使用GraalVM编译Hibernate遇运行时错误,求解决方案

Hibernate 结合 GraalVM 原生编译运行故障排查

我的项目依赖Hibernate,尝试用GraalVM编译时过程顺利,但运行时报错:

2023-10-26 | 19:13:52.154 [        main] ←[34mINFO ←[0;39m | ←[36m                org.hibernate.Version←[0;39m | HHH000412: Hibernate ORM core version 5.6.14.Final
Exception in thread "main" com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:121)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130)
        at java.base@21.0.1/java.lang.ClassLoader.defineClass(ClassLoader.java:280)
        at net.bytebuddy.utility.dispatcher.JavaDispatcher$DynamicClassLoader.invoker(JavaDispatcher.java:1383)
        at net.bytebuddy.utility.dispatcher.JavaDispatcher$InvokerCreationAction.run(JavaDispatcher.java:459)
        at net.bytebuddy.utility.dispatcher.JavaDispatcher$InvokerCreationAction.run(JavaDispatcher.java:452)

已尝试的解决方案

  • 将Hibernate版本升级至GraalVM兼容列表中的版本,使用native-agent捕获所需代理类,但未成功
  • 了解到Quarkus框架对GraalVM有优化,但不在我的考虑范围内
  • 改用hibernate-entitymanager:5.4.10版本,每次编译都用native-agent收集配置文件,仍报错:
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
        at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123)
        at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
        at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:181)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:305)

更新进展

  • 已将所有依赖升级至当前最新版Hibernate(因过时Criteria用法耗费不少精力,最终成功适配),但Hibernate的传递依赖ByteBuddy仍阻碍原生编译进程
  • 尝试启用实验特性experimental-class-define-support获取预定义类的必要信息,并通过-H:PredefinedClassesConfigurationFiles配置,仍出现如下错误:
Caused by: java.lang.UnsupportedOperationException: Defining new classes at runtime is not supported
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unimplemented(VMError.java:195)
        at java.base@21.0.1/java.lang.invoke.MethodHandles$Lookup.defineClass(MethodHandles.java:45)
        at java.base@21.0.1/java.lang.reflect.Method.invoke(Method.java:580)
        at net.bytebuddy.utility.Invoker$Dispatcher.invoke(Unknown Source)
        at net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForNonStaticMethod.invoke(JavaDispatcher.java:1032)
        at net.bytebuddy.utility.dispatcher.JavaDispatcher$ProxiedInvocationHandler.invoke(JavaDispatcher.java:1162)
        at jdk.proxy4/jdk.proxy4.$Proxy63.defineClass(Unknown Source)
        at net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup.injectRaw(ClassInjector.java:1638)
        ... 36 more 

提问

是否有人实现过Hibernate结合ByteBuddy通过GraalVM原生编译并正常运行的案例?我已提供复现示例仓库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:25:57