我想在 Spring Boot 应用程序中使用 Hibernate 注释
@CreationTimestamp
和 @UpdateTimestamp
,并使用 GraalVM 编译为本机映像。
运行图像时,我在错误堆栈的底部得到,
java.lang.NoSuchMethodException: org.hibernate.generator.internal.CurrentTimestampGeneration.<init>()
。
使用
mvn spring-boot:run
运行应用程序时没有问题。
相关信息:
添加该类:
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})
有关 自定义提示的更多文档。