@CreationTimestamp 与 GraalVM 触发 java.lang.NoSuchMethodException: org.hibernate.generator.internal.CurrentTimestampGeneration

问题描述 投票:0回答:1

我想在 Spring Boot 应用程序中使用 Hibernate 注释

@CreationTimestamp
@UpdateTimestamp
,并使用 GraalVM 编译为本机映像。

运行图像时,我在错误堆栈的底部得到,

java.lang.NoSuchMethodException: org.hibernate.generator.internal.CurrentTimestampGeneration.<init>()

使用

mvn spring-boot:run
运行应用程序时没有问题。

相关信息:

java spring-boot hibernate graalvm
1个回答
0
投票

添加该类:

public class HibernateNativeHints implements RuntimeHintsRegistrar {

    @Override
    public void registerHints(@NonNull RuntimeHints hints, @Nullable ClassLoader classLoader) {
        try {
            Constructor<CurrentTimestampGeneration> constructor1 =
                    ReflectionUtils.accessibleConstructor(CurrentTimestampGeneration.class,
                                                          CurrentTimestamp.class,
                                                          Member.class,
                                                          GeneratorCreationContext.class);
            Constructor<CurrentTimestampGeneration> constructor2 =
                    ReflectionUtils.accessibleConstructor(CurrentTimestampGeneration.class,
                                                          CreationTimestamp.class,
                                                          Member.class,
                                                          GeneratorCreationContext.class);
            Constructor<CurrentTimestampGeneration> constructor3 =
                    ReflectionUtils.accessibleConstructor(CurrentTimestampGeneration.class,
                                                          UpdateTimestamp.class,
                                                          Member.class,
                                                          GeneratorCreationContext.class);
            hints.reflection().registerConstructor(constructor1, ExecutableMode.INVOKE);
            hints.reflection().registerConstructor(constructor2, ExecutableMode.INVOKE);
            hints.reflection().registerConstructor(constructor3, ExecutableMode.INVOKE);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}

并在您现有的 Spring Boot 应用程序中引用它

@SpringBootApplication
:

@SpringBootApplication
@ImportRuntimeHints({HibernateNativeHints.class})

有关 自定义提示的更多文档。

© www.soinside.com 2019 - 2024. All rights reserved.