Quarkus + Hibernate ORM 抛出 EnhancementException:无法增强 class <classname>

Quarkus + Hibernate ORM throws EnhancementException: Failed to enhance class <classname>

我们想在 Quarkus 应用中为我们的一些实体使用 @MappedSuperclass

当我们在父 class 中添加私有字段时,我们得到以下异常(我用占位符替换了字段和 class 名称)。

如果我们进行字段声明public,这个问题就解决了。这是我们可以接受的,但我想知道是否有某种方法可以使该字段保持私有并仍然使用 Quarkus 带来的 Hibernate 增强过程?

Caused by: java.lang.IllegalStateException: Cannot access private <fieldType> <fieldName> from class <className>
    at net.bytebuddy.asm.Advice$OffsetMapping$ForField$Resolved.resolve(Advice.java:2346)
    at net.bytebuddy.asm.Advice$OffsetMapping$ForField.resolve(Advice.java:2121)
    at net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodEnter.doApply(Advice.java:7715)
    at net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$ForMethodEnter.apply(Advice.java:7676)
    at net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner.visitMethod(Advice.java:7385)
    at net.bytebuddy.jar.asm.ClassReader.readMethod(ClassReader.java:1123)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:688)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:400)
    at net.bytebuddy.asm.Advice$Dispatcher$Inlining$Resolved$AdviceMethodInliner.apply(Advice.java:7379)
    at net.bytebuddy.asm.Advice$AdviceVisitor.onAfterExceptionTable(Advice.java:9427)
    at net.bytebuddy.utility.visitor.ExceptionTableSensitiveMethodVisitor.considerEndOfExceptionTable(ExceptionTableSensitiveMethodVisitor.java:49)
    at net.bytebuddy.utility.visitor.ExceptionTableSensitiveMethodVisitor.visitVarInsn(ExceptionTableSensitiveMethodVisitor.java:94)
    at org.hibernate.bytecode.enhance.internal.bytebuddy.InlineDirtyCheckingHandler.apply(InlineDirtyCheckingHandler.java:93)
    at net.bytebuddy.implementation.bytecode.ByteCodeAppender$Compound.apply(ByteCodeAppender.java:151)
    at net.bytebuddy.asm.Advice$Appender$EmulatingMethodVisitor.resolve(Advice.java:10031)
    at net.bytebuddy.asm.Advice$Appender.apply(Advice.java:9984)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyCode(TypeWriter.java:713)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyBody(TypeWriter.java:698)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod.apply(TypeWriter.java:605)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining$WithFullProcessing$RedefinitionClassVisitor.onVisitEnd(TypeWriter.java:4539)
    at net.bytebuddy.utility.visitor.MetadataAwareClassVisitor.visitEnd(MetadataAwareClassVisitor.java:271)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:692)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:400)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:3397)
    at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:1933)
    at net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder.make(RedefinitionDynamicTypeBuilder.java:217)
    at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3397)
    at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3614)
    at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.make(ByteBuddyState.java:193)
    at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.rewrite(ByteBuddyState.java:146)
    at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.enhance(EnhancerImpl.java:132)

我认为这是一个错误,我为此创建了一个问题:https://hibernate.atlassian.net/browse/HHH-13759

更新 2:错误已解决

更新 1:经进一步检查,将注释移至 getter 实际上不起作用。现在最好将字段设置为 public.