| First of all, thanks for a great work Hibernate is doing! Now, with Hibernate 5.2.2, build time enhancement fails for entities with 2 mapped classes. For given classes:
@MappedSuperclass
abstract class A {
@Id
Long id;
}
@MappedSuperclass
abstract class B extends A { }
@Entity
class C extends B { }
When doing enhancement using maven plugin 5.2.2 with config:
<configuration>
<failOnError>true</failOnError>
<enableLazyInitialization>true</enableLazyInitialization>
<enableDirtyTracking>true</enableDirtyTracking>
<enableAssociationManagement>true</enableAssociationManagement>
</configuration>
failure occurs as follows:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.hibernate.orm.tooling:hibernate-enhance-maven-plugin:5.2.2.Final:enhance (default) on project ice-model: Unable to enhance class: com.itf.ice2.domain.accounting.AccountingEntry
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to enhance class: com.itf.ice2.domain.accounting.AccountingEntry
at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.doEnhancement(MavenEnhancePlugin.java:249)
at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.execute(MavenEnhancePlugin.java:155)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 19 more
Caused by: org.hibernate.bytecode.enhance.spi.EnhancementException: Unable to enhance persistent attribute [com.itf.ice2.domain.accounting.AccountingEntry:partialBalancingEntries]
at org.hibernate.bytecode.enhance.internal.PersistentAttributesEnhancer.enhancePersistentAttribute(PersistentAttributesEnhancer.java:126)
at org.hibernate.bytecode.enhance.internal.PersistentAttributesEnhancer.enhance(PersistentAttributesEnhancer.java:62)
at org.hibernate.bytecode.enhance.internal.EntityEnhancer.enhance(EntityEnhancer.java:62)
at org.hibernate.bytecode.enhance.spi.Enhancer.enhance(Enhancer.java:130)
at org.hibernate.bytecode.enhance.spi.Enhancer.enhance(Enhancer.java:73)
at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.doEnhancement(MavenEnhancePlugin.java:244)
... 22 more
Caused by: org.hibernate.bytecode.enhance.spi.EnhancementException: Could not enhance class [com.itf.ice2.domain.accounting.AccountingEntry] to add method [$$_hibernate_read_balancedEntry] for field [balancedEntry]
at org.hibernate.bytecode.enhance.internal.MethodWriter.addGetter(MethodWriter.java:61)
at org.hibernate.bytecode.enhance.internal.PersistentAttributesEnhancer.handleBiDirectionalAssociation(PersistentAttributesEnhancer.java:275)
at org.hibernate.bytecode.enhance.internal.PersistentAttributesEnhancer.generateFieldWriter(PersistentAttributesEnhancer.java:218)
at org.hibernate.bytecode.enhance.internal.PersistentAttributesEnhancer.enhancePersistentAttribute(PersistentAttributesEnhancer.java:117)
... 27 more
Caused by: javassist.NotFoundException: field: balancedEntry in com.itf.ice2.domain.accounting.AccountingEntry
at javassist.CtClassType.checkGetField(CtClassType.java:945)
at javassist.CtClassType.getField(CtClassType.java:934)
at javassist.CtClass.getField(CtClass.java:824)
at org.hibernate.bytecode.enhance.internal.MethodWriter.addGetter(MethodWriter.java:51)
From very quick analysis it looks like it is related to
HHH-10646 Closed as PersistentAttributesEnhancer.collectPersistentFields returns all fields for current target (also from super classes). As such, MethodWriter.addGetter tries to add getters for all fields to current target, including those from superclass, which fails. |