Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
DavideD committed Jan 9, 2025
1 parent 47639d6 commit 2b2e3e1
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 121 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -527,27 +527,11 @@ private CompletionStage<?> loadFromDatabaseOrCache(
return completedFuture( loaded );
}
}
return determineLoaderToUse( session ).load( identifier, entity, LockOptions.NONE, session );
return ( (ReactiveSingleIdEntityLoader<?>) determineLoaderToUse( session ) )
.load( identifier, entity, LockOptions.NONE, session );
}

default ReactiveSingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
if ( hasNamedQueryLoader() ) {
return (ReactiveSingleIdEntityLoader<?>) getSingleIdLoader();
}
else {
final LoadQueryInfluencers influencers = session.getLoadQueryInfluencers();
// no subselect fetching for entities for now
return isAffectedByInfluencers( influencers, true )
? (ReactiveSingleIdEntityLoader<?>) buildSingleIdEntityLoader( influencers )
: (ReactiveSingleIdEntityLoader<?>) getSingleIdLoader();
}
}

boolean hasNamedQueryLoader();

SingleIdEntityLoader<?> buildSingleIdEntityLoader(LoadQueryInfluencers loadQueryInfluencers);

SingleIdEntityLoader<?> getSingleIdLoader();
SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session);

boolean initializeLazyProperty(String fieldName, Object entity, EntityEntry entry, int lazyIndex, Object selectedValue);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,11 @@ protected AttributeMapping buildPluralAttributeMapping(
);
}

@Override
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
return super.determineLoaderToUse( session );
}

@Override
protected InsertCoordinator buildInsertCoordinator() {
return ReactiveCoordinatorFactory.buildInsertCoordinator( this, getFactory() );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,11 @@ protected AttributeMapping buildPluralAttributeMapping(
);
}

@Override
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
return super.determineLoaderToUse( session );
}

@Override
public NaturalIdMapping generateNaturalIdMapping(MappingModelCreationProcess creationProcess, PersistentClass bootEntityDescriptor) {
return ReactiveAbstractEntityPersister.super.generateNaturalIdMapping(creationProcess, bootEntityDescriptor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ private void attachEventContextManagingListenersIfRequired(ServiceRegistry servi
eventListenerRegistry.getEventListenerGroup( EventType.LOAD ).appendListener( new DefaultReactiveLoadEventListener() );
eventListenerRegistry.getEventListenerGroup( EventType.INIT_COLLECTION ).appendListener( new DefaultReactiveInitializeCollectionEventListener() );
eventListenerRegistry.getEventListenerGroup( EventType.POST_LOAD ).appendListener( new DefaultReactivePostLoadEventListener() );
eventListenerRegistry.getEventListenerGroup( EventType.RESOLVE_NATURAL_ID ).appendListener( new DefaultReactiveResolveNaturalIdEventListener() );
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.hibernate.reactive.query.sql.spi.ReactiveNamedNativeQueryMemento;
import org.hibernate.reactive.query.sql.spi.ReactiveNamedSqmQueryMemento;

import jakarta.persistence.Query;
import jakarta.persistence.TypedQueryReference;

public class ReactiveNamedObjectRepositoryImpl implements NamedObjectRepository {
Expand All @@ -42,6 +43,11 @@ public NamedSqmQueryMemento<?> getSqmQueryMemento(String queryName) {
return wrapSqmQueryMemento( delegate.getSqmQueryMemento( queryName ) );
}

@Override
public void registerNamedQuery(String name, Query query) {
delegate.registerNamedQuery( name, query );
}

@Override
public void visitSqmQueryMementos(Consumer<NamedSqmQueryMemento<?>> action) {
delegate.visitSqmQueryMementos( action );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ protected SqlAstTranslator<? extends JdbcOperationQueryMutation> createTranslato
domainParameterXref,
executionContext.getQueryParameterBindings(),
executionContext.getSession().getLoadQueryInfluencers(),
factory
factory.getSqlTranslationEngine()
);

sqmInterpretation = (SqmTranslation<? extends AbstractUpdateOrDeleteStatement>) translator.translate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ private SqlAstTranslator<? extends JdbcOperationQueryMutation> createInsertTrans
domainParameterXref,
executionContext.getQueryParameterBindings(),
executionContext.getSession().getLoadQueryInfluencers(),
factory
factory.getSqlTranslationEngine()
)
.translate();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private SqlAstTranslator<? extends JdbcOperationQueryMutation> createUpdateTrans
domainParameterXref,
executionContext.getQueryParameterBindings(),
executionContext.getSession().getLoadQueryInfluencers(),
factory
factory.getSqlTranslationEngine()
);

final SqmTranslation<? extends MutationStatement> sqmInterpretation = translator.translate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public ReactiveRestrictedDeleteExecutionDelegate(
queryOptions,
loadQueryInfluencers,
queryParameterBindings,
sessionFactory
sessionFactory.getSqlTranslationEngine()
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,10 @@
import org.hibernate.engine.internal.StatefulPersistenceContext;
import org.hibernate.engine.spi.EffectiveEntityGraph;
import org.hibernate.engine.spi.EntityEntry;
import org.hibernate.engine.spi.EntityKey;
import org.hibernate.engine.spi.ExceptionConverter;
import org.hibernate.engine.spi.PersistenceContext;
import org.hibernate.engine.spi.PersistentAttributeInterceptable;
import org.hibernate.engine.spi.PersistentAttributeInterceptor;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.spi.Status;
import org.hibernate.event.service.spi.EventListenerGroup;
import org.hibernate.event.spi.AutoFlushEvent;
import org.hibernate.event.spi.DeleteContext;
Expand Down Expand Up @@ -124,7 +121,6 @@
import static java.lang.Boolean.TRUE;
import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable;
import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable;
import static org.hibernate.engine.spi.NaturalIdResolutions.INVALID_NATURAL_ID_REFERENCE;
import static org.hibernate.event.spi.LoadEventListener.IMMEDIATE_LOAD;
import static org.hibernate.internal.util.StringHelper.isEmpty;
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
Expand Down Expand Up @@ -689,7 +685,7 @@ public CompletionStage<Void> reactiveInitializeCollection(PersistentCollection<?
pulseTransactionCoordinator();
InitializeCollectionEvent event = new InitializeCollectionEvent( collection, this );

EventListenerGroup<InitializeCollectionEventListener> eventListenerGroupInitCollection = fastSessionServices.eventListenerGroup_INIT_COLLECTION;
EventListenerGroup<InitializeCollectionEventListener> eventListenerGroupInitCollection = getFactory().getEventListenerGroups().eventListenerGroup_INIT_COLLECTION;
return eventListenerGroupInitCollection
.fireEventOnEachListener(
event,
Expand Down Expand Up @@ -730,7 +726,7 @@ private CompletionStage<Void> firePersist(PersistEvent event) {
checkTransactionSynchStatus();
checkNoUnresolvedActionsBeforeOperation();

return fastSessionServices.eventListenerGroup_PERSIST
return getFactory().getEventListenerGroups().eventListenerGroup_PERSIST
.fireEventOnEachListener( event, (ReactivePersistEventListener l) -> l::reactiveOnPersist )
.handle( (v, e) -> {
checkNoUnresolvedActionsAfterOperation();
Expand All @@ -748,7 +744,7 @@ else if ( e instanceof RuntimeException ) {
private CompletionStage<Void> firePersist(PersistContext copiedAlready, PersistEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_PERSIST
return getFactory().getEventListenerGroups().eventListenerGroup_PERSIST
.fireEventOnEachListener( event, copiedAlready, (ReactivePersistEventListener l) -> l::reactiveOnPersist )
.handle( (v, e) -> {
delayedAfterCompletion();
Expand All @@ -772,7 +768,7 @@ public CompletionStage<Void> reactivePersistOnFlush(Object entity, PersistContex
private CompletionStage<Void> firePersistOnFlush(PersistContext copiedAlready, PersistEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_PERSIST
return getFactory().getEventListenerGroups().eventListenerGroup_PERSIST
.fireEventOnEachListener( event, copiedAlready, (ReactivePersistEventListener l) -> l::reactiveOnPersist )
.whenComplete( (v, e) -> delayedAfterCompletion() );
}
Expand Down Expand Up @@ -828,10 +824,8 @@ private void logRemoveOrphanBeforeUpdates(String timing, String entityName, Obje
private CompletionStage<Void> fireRemove(DeleteEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_DELETE.fireEventOnEachListener(
event,
(ReactiveDeleteEventListener l) -> l::reactiveOnDelete
)
return getFactory().getEventListenerGroups().eventListenerGroup_DELETE
.fireEventOnEachListener( event, (ReactiveDeleteEventListener l) -> l::reactiveOnDelete )
.handle( (v, e) -> {
delayedAfterCompletion();

Expand All @@ -852,9 +846,8 @@ else if ( e instanceof RuntimeException ) {
private CompletionStage<Void> fireRemove(DeleteEvent event, DeleteContext transientEntities) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_DELETE.fireEventOnEachListener( event, transientEntities,
(ReactiveDeleteEventListener l) -> l::reactiveOnDelete
)
return getFactory().getEventListenerGroups().eventListenerGroup_DELETE
.fireEventOnEachListener( event, transientEntities, (ReactiveDeleteEventListener l) -> l::reactiveOnDelete )
.handle( (v, e) -> {
delayedAfterCompletion();

Expand Down Expand Up @@ -890,7 +883,7 @@ private <T> CompletionStage<T> fireMerge(MergeEvent event) {
checkTransactionSynchStatus();
checkNoUnresolvedActionsBeforeOperation();

return fastSessionServices.eventListenerGroup_MERGE
return getFactory().getEventListenerGroups().eventListenerGroup_MERGE
.fireEventOnEachListener( event, (ReactiveMergeEventListener l) -> l::reactiveOnMerge )
.handle( (v, e) -> {
checkNoUnresolvedActionsAfterOperation();
Expand All @@ -912,7 +905,7 @@ else if ( e instanceof RuntimeException ) {
private CompletionStage<Void> fireMerge(MergeContext copiedAlready, MergeEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_MERGE
return getFactory().getEventListenerGroups().eventListenerGroup_MERGE
.fireEventOnEachListener( event, copiedAlready,(ReactiveMergeEventListener l) -> l::reactiveOnMerge )
.handle( (v, e) -> {
delayedAfterCompletion();
Expand Down Expand Up @@ -952,7 +945,7 @@ public CompletionStage<Boolean> reactiveAutoFlushIfRequired(Set<String> querySpa
// }

AutoFlushEvent event = new AutoFlushEvent( querySpaces, this );
return fastSessionServices.eventListenerGroup_AUTO_FLUSH
return getFactory().getEventListenerGroups().eventListenerGroup_AUTO_FLUSH
.fireEventOnEachListener( event, (DefaultReactiveAutoFlushEventListener l) -> l::reactiveOnAutoFlush )
.thenApply( v -> event.isFlushRequired() );
}
Expand Down Expand Up @@ -985,7 +978,7 @@ private CompletionStage<Void> doFlush() {
throw LOG.flushDuringCascadeIsDangerous();
}

return fastSessionServices.eventListenerGroup_FLUSH
return getFactory().getEventListenerGroups().eventListenerGroup_FLUSH
.fireEventOnEachListener( new FlushEvent( this ), (ReactiveFlushEventListener l) -> l::reactiveOnFlush )
.handle( (v, e) -> {
delayedAfterCompletion();
Expand Down Expand Up @@ -1034,10 +1027,8 @@ CompletionStage<Void> fireRefresh(RefreshEvent event) {
}
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_REFRESH.fireEventOnEachListener(
event,
(ReactiveRefreshEventListener l) -> l::reactiveOnRefresh
)
return getFactory().getEventListenerGroups().eventListenerGroup_REFRESH
.fireEventOnEachListener( event, (ReactiveRefreshEventListener l) -> l::reactiveOnRefresh )
.handle( (v, e) -> {
delayedAfterCompletion();

Expand All @@ -1057,12 +1048,8 @@ CompletionStage<Void> fireRefresh(RefreshEvent event) {
private CompletionStage<Void> fireRefresh(RefreshContext refreshedAlready, RefreshEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_REFRESH
.fireEventOnEachListener(
event,
refreshedAlready,
(ReactiveRefreshEventListener l) -> l::reactiveOnRefresh
)
return getFactory().getEventListenerGroups().eventListenerGroup_REFRESH
.fireEventOnEachListener( event, refreshedAlready, (ReactiveRefreshEventListener l) -> l::reactiveOnRefresh )
.handle( (v, e) -> {
delayedAfterCompletion();

Expand All @@ -1082,10 +1069,8 @@ public CompletionStage<Void> reactiveLock(Object object, LockOptions lockOptions
private CompletionStage<Void> fireLock(LockEvent event) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_LOCK.fireEventOnEachListener(
event,
(ReactiveLockEventListener l) -> l::reactiveOnLock
)
return getFactory().getEventListenerGroups().eventListenerGroup_LOCK
.fireEventOnEachListener( event, (ReactiveLockEventListener l) -> l::reactiveOnLock )
.handle( (v, e) -> {
delayedAfterCompletion();

Expand Down Expand Up @@ -1174,8 +1159,9 @@ public <T> CompletionStage<List<T>> reactiveFind(Class<T> entityClass, Object...
@Override
public <T> CompletionStage<T> reactiveFind(Class<T> entityClass, Map<String, Object> ids) {
final EntityPersister persister = getFactory().getMappingMetamodel().getEntityDescriptor( entityClass );
return new NaturalIdLoadAccessImpl<T>( persister ).resolveNaturalId( ids )
.thenCompose( id -> reactiveFind( entityClass, id, null, null ) );
// return new NaturalIdLoadAccessImpl<T>( persister ).resolveNaturalId( ids )
// .thenCompose( id -> reactiveFind( entityClass, id, null, null ) );
return null;
}

private CompletionStage<Void> fireReactiveLoad(LoadEvent event, LoadEventListener.LoadType loadType) {
Expand All @@ -1188,7 +1174,7 @@ private CompletionStage<Void> fireReactiveLoad(LoadEvent event, LoadEventListene
private CompletionStage<Void> fireLoadNoChecks(LoadEvent event, LoadEventListener.LoadType loadType) {
pulseTransactionCoordinator();

return fastSessionServices.eventListenerGroup_LOAD
return getFactory().getEventListenerGroups().eventListenerGroup_LOAD
.fireEventOnEachListener( event, loadType,(ReactiveLoadEventListener l) -> l::reactiveOnLoad
);
}
Expand Down Expand Up @@ -1527,61 +1513,6 @@ protected void synchronizationEnabled(boolean synchronizationEnabled) {
this.synchronizationEnabled = synchronizationEnabled;
}

protected final CompletionStage<Object> resolveNaturalId(Map<String, Object> naturalIdParameters) {
performAnyNeededCrossReferenceSynchronizations();

ResolveNaturalIdEvent event =
new ResolveNaturalIdEvent( naturalIdParameters, entityPersister, ReactiveSessionImpl.this );
return fireResolveNaturalId( event )
.thenApply( v -> event.getEntityId() == INVALID_NATURAL_ID_REFERENCE ? null : event.getEntityId() );
}

protected void performAnyNeededCrossReferenceSynchronizations() {
if ( !synchronizationEnabled ) {
// synchronization (this process) was disabled
return;
}
if ( entityPersister.getEntityMetamodel().hasImmutableNaturalId() ) {
// only mutable natural-ids need this processing
return;
}
if ( !isTransactionInProgress() ) {
// not in a transaction so skip synchronization
return;
}

final PersistenceContext persistenceContext = getPersistenceContextInternal();
// final boolean debugEnabled = log.isDebugEnabled();
for ( Object pk : persistenceContext.getNaturalIdResolutions()
.getCachedPkResolutions( entityPersister ) ) {
final EntityKey entityKey = generateEntityKey( pk, entityPersister );
final Object entity = persistenceContext.getEntity( entityKey );
final EntityEntry entry = persistenceContext.getEntry( entity );

if ( entry == null ) {
// if ( debugEnabled ) {
// log.debug(
// "Cached natural-id/pk resolution linked to null EntityEntry in persistence context : "
// + MessageHelper.infoString( entityPersister, pk, getFactory() )
// );
// }
continue;
}

if ( !entry.requiresDirtyCheck( entity ) ) {
continue;
}

// MANAGED is the only status we care about here...
if ( entry.getStatus() != Status.MANAGED ) {
continue;
}

persistenceContext.getNaturalIdResolutions()
.handleSynchronization( pk, entity, entityPersister );
}
}

protected final ReactiveIdentifierLoadAccessImpl<T> getIdentifierLoadAccess() {
final ReactiveIdentifierLoadAccessImpl<T> identifierLoadAccess = new ReactiveIdentifierLoadAccessImpl<>(
entityPersister );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,23 +315,23 @@ private CompletionStage<Void> reactiveInsert(Object entity, ReactiveEntityPersis
}

private boolean firePreInsert(Object entity, Object id, Object[] state, EntityPersister persister) {
if ( fastSessionServices.eventListenerGroup_PRE_INSERT.isEmpty() ) {
if ( getFactory().getEventListenerGroups().eventListenerGroup_PRE_INSERT.isEmpty() ) {
return false;
}
else {
boolean veto = false;
final PreInsertEvent event = new PreInsertEvent( entity, id, state, persister, null );
for ( PreInsertEventListener listener : fastSessionServices.eventListenerGroup_PRE_INSERT.listeners() ) {
for ( PreInsertEventListener listener : getFactory().getEventListenerGroups().eventListenerGroup_PRE_INSERT.listeners() ) {
veto |= listener.onPreInsert( event );
}
return veto;
}
}

private void firePostInsert(Object entity, Object id, Object[] state, EntityPersister persister) {
if ( !fastSessionServices.eventListenerGroup_POST_INSERT.isEmpty() ) {
if ( !getFactory().getEventListenerGroups().eventListenerGroup_POST_INSERT.isEmpty() ) {
final PostInsertEvent event = new PostInsertEvent( entity, id, state, persister, null );
for ( PostInsertEventListener listener : fastSessionServices.eventListenerGroup_POST_INSERT.listeners() ) {
for ( PostInsertEventListener listener : getFactory().getEventListenerGroups().eventListenerGroup_POST_INSERT.listeners() ) {
listener.onPostInsert( event );
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public CompletionStage<Void> reactiveResolveInstance(EntityDelayedFetchInitializ
final String uniqueKeyPropertyName = referencedModelPart.getReferencedPropertyName();
final Type uniqueKeyPropertyType = uniqueKeyPropertyName == null
? concreteDescriptor.getIdentifierType()
: session.getFactory().getReferencedPropertyType( concreteDescriptor.getEntityName(), uniqueKeyPropertyName );
: session.getFactory().getRuntimeMetamodels().getReferencedPropertyType( concreteDescriptor.getEntityName(), uniqueKeyPropertyName );
final EntityUniqueKey euk = new EntityUniqueKey(
concreteDescriptor.getEntityName(),
uniqueKeyPropertyName,
Expand Down
Loading

0 comments on commit 2b2e3e1

Please sign in to comment.