diff --git a/hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/interceptor/EnhancementAsProxyLazinessInterceptor.java b/hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/interceptor/EnhancementAsProxyLazinessInterceptor.java index 3c9745754cf8..63f4c4ebb4b1 100644 --- a/hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/interceptor/EnhancementAsProxyLazinessInterceptor.java +++ b/hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/interceptor/EnhancementAsProxyLazinessInterceptor.java @@ -298,6 +298,13 @@ public boolean hasWrittenFieldNames() { return writtenFieldNames != null && !writtenFieldNames.isEmpty(); } + /* + * Used by Hibernate Reactive + */ + protected boolean isIdentifier(String attributeName) { + return meta.identifierAttributeNames.contains( attributeName ); + } + private enum Status { UNINITIALIZED, INITIALIZING, diff --git a/hibernate-core/src/main/java/org/hibernate/bytecode/internal/BytecodeEnhancementMetadataPojoImpl.java b/hibernate-core/src/main/java/org/hibernate/bytecode/internal/BytecodeEnhancementMetadataPojoImpl.java index 5fa52a96880b..c8536e8792b0 100644 --- a/hibernate-core/src/main/java/org/hibernate/bytecode/internal/BytecodeEnhancementMetadataPojoImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/bytecode/internal/BytecodeEnhancementMetadataPojoImpl.java @@ -40,11 +40,11 @@ * * @author Steve Ebersole */ -public final class BytecodeEnhancementMetadataPojoImpl implements BytecodeEnhancementMetadata { +public class BytecodeEnhancementMetadataPojoImpl implements BytecodeEnhancementMetadata { /** * Static constructor */ - public static BytecodeEnhancementMetadata from( + public static BytecodeEnhancementMetadataPojoImpl from( PersistentClass persistentClass, Set identifierAttributeNames, CompositeType nonAggregatedCidMapper, @@ -75,7 +75,10 @@ public static BytecodeEnhancementMetadata from( private final LazyAttributeLoadingInterceptor.EntityRelatedState lazyAttributeLoadingInterceptorState; private volatile transient EnhancementAsProxyLazinessInterceptor.EntityRelatedState enhancementAsProxyInterceptorState; - BytecodeEnhancementMetadataPojoImpl( + /* + * Used by Hibernate Reactive + */ + protected BytecodeEnhancementMetadataPojoImpl( String entityName, Class entityClass, Set identifierAttributeNames, @@ -248,9 +251,12 @@ public void injectEnhancedEntityAsProxyInterceptor( ); } + /* + * Used by Hibernate Reactive + */ //This state object needs to be lazily initialized as it needs access to the Persister, but once //initialized it can be reused across multiple sessions. - private EnhancementAsProxyLazinessInterceptor.EntityRelatedState getEnhancementAsProxyLazinessInterceptorMetastate(SharedSessionContractImplementor session) { + public EnhancementAsProxyLazinessInterceptor.EntityRelatedState getEnhancementAsProxyLazinessInterceptorMetastate(SharedSessionContractImplementor session) { EnhancementAsProxyLazinessInterceptor.EntityRelatedState state = this.enhancementAsProxyInterceptorState; if ( state == null ) { final EntityPersister entityPersister = session.getFactory().getMappingMetamodel() @@ -311,4 +317,17 @@ public void injectInterceptor( return (BytecodeLazyAttributeInterceptor) interceptor; } + /* + * Used by Hibernate Reactive + */ + public Class getEntityClass() { + return entityClass; + } + + /* + * Used by Hibernate Reactive + */ + public LazyAttributeLoadingInterceptor.EntityRelatedState getLazyAttributeLoadingInterceptorState() { + return lazyAttributeLoadingInterceptorState; + } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AbstractEntityInstantiatorPojo.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AbstractEntityInstantiatorPojo.java index a5efe315377b..09761f4e5cb3 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AbstractEntityInstantiatorPojo.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AbstractEntityInstantiatorPojo.java @@ -65,4 +65,18 @@ public boolean isInstance(Object object) { // this one needed only for guessEntityMode() || proxyInterface!=null && proxyInterface.isInstance(object); } + + /* + * Used by Hibernate Reactive + */ + protected boolean isApplyBytecodeInterception() { + return applyBytecodeInterception; + } + + /* + * Used by Hibernate Reactive + */ + protected LazyAttributeLoadingInterceptor.EntityRelatedState getLoadingInterceptorState() { + return loadingInterceptorState; + } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EntityRepresentationStrategyPojoStandard.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EntityRepresentationStrategyPojoStandard.java index 5e0baa9879b7..fd0fcc9e3636 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EntityRepresentationStrategyPojoStandard.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EntityRepresentationStrategyPojoStandard.java @@ -159,7 +159,10 @@ private Map buildPropertyAccessMap(PersistentClass bootD return propertyAccessMap; } - private EntityInstantiator determineInstantiator(PersistentClass bootDescriptor, EntityPersister persister) { + /* + * Used by Hibernate Reactive + */ + protected EntityInstantiator determineInstantiator(PersistentClass bootDescriptor, EntityPersister persister) { if ( reflectionOptimizer != null && reflectionOptimizer.getInstantiationOptimizer() != null ) { return new EntityInstantiatorPojoOptimized( persister, diff --git a/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java b/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java index 2e3709781292..dc41eca1d28f 100644 --- a/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java +++ b/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java @@ -528,7 +528,7 @@ private static boolean isLazy( ); } - private static BytecodeEnhancementMetadata bytecodeEnhancementMetadata( + private BytecodeEnhancementMetadata bytecodeEnhancementMetadata( PersistentClass persistentClass, IdentifierProperty identifierAttribute, RuntimeModelCreationContext creationContext, @@ -550,12 +550,12 @@ private static BytecodeEnhancementMetadata bytecodeEnhancementMetadata( idAttributeNames = singleton( identifierAttribute.getName() ); } - return BytecodeEnhancementMetadataPojoImpl.from( + return getBytecodeEnhancementMetadataPojo( persistentClass, + creationContext, idAttributeNames, nonAggregatedCidMapper, - collectionsInDefaultFetchGroupEnabled, - creationContext.getMetadata() + collectionsInDefaultFetchGroupEnabled ); } else { @@ -563,6 +563,19 @@ private static BytecodeEnhancementMetadata bytecodeEnhancementMetadata( } } + /* + * Used by Hibernate Reactive + */ + protected BytecodeEnhancementMetadata getBytecodeEnhancementMetadataPojo(PersistentClass persistentClass, RuntimeModelCreationContext creationContext, Set idAttributeNames, CompositeType nonAggregatedCidMapper, boolean collectionsInDefaultFetchGroupEnabled) { + return BytecodeEnhancementMetadataPojoImpl.from( + persistentClass, + idAttributeNames, + nonAggregatedCidMapper, + collectionsInDefaultFetchGroupEnabled, + creationContext.getMetadata() + ); + } + private static boolean writePropertyValue(OnExecutionGenerator generator) { final boolean writePropertyValue = generator.writePropertyValue(); // TODO: move this validation somewhere else!