Skip to content

Commit e3c6c02

Browse files
barreirosebersole
authored andcommitted
HHH-10076 - bytecode enhancer - CompositeEnhancer does not add ManagedComposite marker interface
(cherry picked from commit 4d6eca5)
1 parent ae6d84b commit e3c6c02

File tree

3 files changed

+10
-23
lines changed

3 files changed

+10
-23
lines changed

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/internal/CompositeEnhancer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public CompositeEnhancer(EnhancementContext context) {
2828
}
2929

3030
public void enhance(CtClass managedCtClass) {
31+
// add the ManagedComposite interface
32+
managedCtClass.addInterface( managedCompositeCtClass );
33+
3134
addInterceptorHandling( managedCtClass );
3235

3336
if ( enhancementContext.doDirtyCheckingInline( managedCtClass ) ) {

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/Enhancer.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class Enhancer {
4242

4343
protected final ClassPool classPool;
4444
protected final CtClass managedEntityCtClass;
45+
protected final CtClass managedCompositeCtClass;
4546
protected final CtClass attributeInterceptorCtClass;
4647
protected final CtClass attributeInterceptableCtClass;
4748
protected final CtClass entityEntryCtClass;
@@ -57,16 +58,11 @@ public Enhancer(EnhancementContext enhancementContext) {
5758
this.enhancementContext = enhancementContext;
5859
this.classPool = buildClassPool( enhancementContext );
5960

60-
// add ManagedEntity contract
61+
// pre-load some of the interfaces that are used
6162
this.managedEntityCtClass = loadCtClassFromClass( classPool, ManagedEntity.class );
62-
63-
// add PersistentAttributeInterceptable contract
63+
this.managedCompositeCtClass = loadCtClassFromClass( classPool, ManagedComposite.class );
6464
this.attributeInterceptableCtClass = loadCtClassFromClass( classPool, PersistentAttributeInterceptable.class );
65-
66-
// add PersistentAttributeInterceptor contract
6765
this.attributeInterceptorCtClass = loadCtClassFromClass( classPool, PersistentAttributeInterceptor.class );
68-
69-
// add PersistentAttributeInterceptor contract
7066
this.entityEntryCtClass = loadCtClassFromClass( classPool, EntityEntry.class );
7167
}
7268
catch (IOException e) {
@@ -125,7 +121,7 @@ private CtClass loadCtClassFromClass(ClassPool cp, Class<?> aClass) throws IOExc
125121
private void enhance(CtClass managedCtClass) {
126122
// can't effectively enhance interfaces
127123
if ( managedCtClass.isInterface() ) {
128-
log.debugf( "Skipping enhancement of [%s]: it's an interface", managedCtClass );
124+
log.debugf( "Skipping enhancement of [%s]: it's an interface!", managedCtClass.getName() );
129125
return;
130126
}
131127
// skip already enhanced classes
@@ -149,7 +145,7 @@ else if ( enhancementContext.doFieldAccessEnhancement( managedCtClass ) ) {
149145
new PersistentAttributesEnhancer( enhancementContext ).enhanceFieldAccess( managedCtClass );
150146
}
151147
else {
152-
log.debug( "Skipping enhancement: not entity or composite" );
148+
log.debugf( "Skipping enhancement of [%s]: not entity or composite", managedCtClass.getName() );
153149
}
154150
}
155151

hibernate-core/src/main/java/org/hibernate/property/access/internal/PropertyAccessStrategyResolverStandardImpl.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
*/
77
package org.hibernate.property.access.internal;
88

9-
import java.lang.reflect.Method;
10-
119
import org.hibernate.EntityMode;
1210
import org.hibernate.HibernateException;
1311
import org.hibernate.boot.registry.selector.spi.StrategySelector;
14-
import org.hibernate.bytecode.enhance.spi.EnhancerConstants;
12+
import org.hibernate.engine.spi.Managed;
1513
import org.hibernate.internal.util.StringHelper;
1614
import org.hibernate.property.access.spi.BuiltInPropertyAccessStrategies;
1715
import org.hibernate.property.access.spi.PropertyAccessStrategy;
@@ -36,7 +34,7 @@ public PropertyAccessStrategy resolvePropertyAccessStrategy(
3634
String explicitAccessStrategyName,
3735
EntityMode entityMode) {
3836

39-
if ( hasBytecodeEnhancedAttributes( containerClass ) ) {
37+
if ( Managed.class.isAssignableFrom( containerClass ) ) {
4038
return PropertyAccessStrategyEnhancedImpl.INSTANCE;
4139
}
4240

@@ -75,14 +73,4 @@ protected StrategySelector strategySelectorService() {
7573
return strategySelectorService;
7674
}
7775

78-
private boolean hasBytecodeEnhancedAttributes(Class<?> containerClass) {
79-
for ( Method m : containerClass.getDeclaredMethods() ) {
80-
if ( m.getName().startsWith( EnhancerConstants.PERSISTENT_FIELD_READER_PREFIX ) ||
81-
m.getName().startsWith( EnhancerConstants.PERSISTENT_FIELD_WRITER_PREFIX ) ) {
82-
return true;
83-
}
84-
}
85-
return false;
86-
}
87-
8876
}

0 commit comments

Comments
 (0)