Skip to content

Commit ddd05ce

Browse files
committed
Changes for Hibernate ORM 7.0 latest snapshot
Among the changes: * Remove use of FastSessionServices * Remove classes related to ResolveNaturalIdEvent
1 parent ce59900 commit ddd05ce

File tree

37 files changed

+261
-618
lines changed

37 files changed

+261
-618
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/EntityTypes.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ public static CompletionStage<Object> resolve(EntityType entityType, Object idOr
7676
* @see OneToOneType#isNull(Object, SharedSessionContractImplementor)
7777
*/
7878
static boolean isNull(EntityType entityType, Object owner, SharedSessionContractImplementor session) {
79-
if ( entityType instanceof OneToOneType ) {
80-
OneToOneType type = (OneToOneType) entityType;
79+
if ( entityType instanceof OneToOneType type ) {
8180
String propertyName = type.getPropertyName();
8281
if ( propertyName != null ) {
8382
final EntityPersister ownerPersister = session.getFactory()
@@ -126,7 +125,7 @@ static CompletionStage<Object> loadByUniqueKey(
126125
entityName,
127126
uniqueKeyPropertyName,
128127
key,
129-
entityType.getIdentifierOrUniqueKeyType( factory ),
128+
entityType.getIdentifierOrUniqueKeyType( factory.getRuntimeMetamodels() ),
130129
factory
131130
);
132131

@@ -273,7 +272,7 @@ private static CompletionStage<Object> resolveIdOrUniqueKey(
273272
.reactiveFetch( id, true )
274273
.thenCompose( fetched -> {
275274
Object idOrUniqueKey = entityType
276-
.getIdentifierOrUniqueKeyType( session.getFactory() )
275+
.getIdentifierOrUniqueKeyType( session.getFactory().getRuntimeMetamodels() )
277276
.replace( fetched, null, session, owner, copyCache );
278277
if ( idOrUniqueKey instanceof CompletionStage ) {
279278
return ( (CompletionStage<?>) idOrUniqueKey )

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveCollectionRecreateAction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void execute() throws HibernateException {
5656
}
5757

5858
private void preRecreate() {
59-
getFastSessionServices()
59+
getEventListenerGroups()
6060
.eventListenerGroup_PRE_COLLECTION_RECREATE
6161
.fireLazyEventOnEachListener( this::newPreCollectionRecreateEvent, PreCollectionRecreateEventListener::onPreRecreateCollection );
6262
}
@@ -66,7 +66,7 @@ private PreCollectionRecreateEvent newPreCollectionRecreateEvent() {
6666
}
6767

6868
private void postRecreate() {
69-
getFastSessionServices()
69+
getEventListenerGroups()
7070
.eventListenerGroup_POST_COLLECTION_RECREATE
7171
.fireLazyEventOnEachListener( this::newPostCollectionRecreateEvent, PostCollectionRecreateEventListener::onPostRecreateCollection );
7272
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveCollectionRemoveAction.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ public void execute() throws HibernateException {
100100
}
101101

102102
private void preRemove() {
103-
getFastSessionServices().eventListenerGroup_PRE_COLLECTION_REMOVE
103+
getEventListenerGroups()
104+
.eventListenerGroup_PRE_COLLECTION_REMOVE
104105
.fireLazyEventOnEachListener( this::newPreCollectionRemoveEvent,
105106
PreCollectionRemoveEventListener::onPreRemoveCollection );
106107
}
@@ -115,7 +116,8 @@ private PreCollectionRemoveEvent newPreCollectionRemoveEvent() {
115116
}
116117

117118
private void postRemove() {
118-
getFastSessionServices().eventListenerGroup_POST_COLLECTION_REMOVE
119+
getEventListenerGroups()
120+
.eventListenerGroup_POST_COLLECTION_REMOVE
119121
.fireLazyEventOnEachListener( this::newPostCollectionRemoveEvent,
120122
PostCollectionRemoveEventListener::onPostRemoveCollection );
121123
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/impl/ReactiveCollectionUpdateAction.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ public void execute() throws HibernateException {
118118
}
119119

120120
private void preUpdate() {
121-
getFastSessionServices().eventListenerGroup_PRE_COLLECTION_UPDATE
121+
getEventListenerGroups()
122+
.eventListenerGroup_PRE_COLLECTION_UPDATE
122123
.fireLazyEventOnEachListener( this::newPreCollectionUpdateEvent,
123124
PreCollectionUpdateEventListener::onPreUpdateCollection );
124125
}
@@ -132,7 +133,8 @@ private PreCollectionUpdateEvent newPreCollectionUpdateEvent() {
132133
}
133134

134135
private void postUpdate() {
135-
getFastSessionServices().eventListenerGroup_POST_COLLECTION_UPDATE
136+
getEventListenerGroups()
137+
.eventListenerGroup_POST_COLLECTION_UPDATE
136138
.fireLazyEventOnEachListener( this::newPostCollectionUpdateEvent,
137139
PostCollectionUpdateEventListener::onPostUpdateCollection );
138140
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/ReactiveResolveNaturalIdEventListener.java

-29
This file was deleted.

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/AbstractReactiveFlushingEventListener.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,8 @@ protected void logFlushResults(FlushEvent event) {
139139
session.getActionQueue().numberOfCollectionRemovals(),
140140
persistenceContext.getCollectionEntriesSize()
141141
);
142-
new EntityPrinter( session.getFactory() ).toString(
143-
persistenceContext.getEntityHoldersByKey().entrySet()
144-
);
142+
new EntityPrinter( session.getFactory() )
143+
.logEntities( persistenceContext.getEntityHoldersByKey().entrySet() );
145144
}
146145

147146
/**
@@ -227,7 +226,7 @@ private int flushEntities(final FlushEvent event, final PersistenceContext persi
227226
final EventSource source = event.getSession();
228227
final Iterable<FlushEntityEventListener> flushListeners =
229228
source.getFactory()
230-
.getFastSessionServices()
229+
.getEventListenerGroups()
231230
.eventListenerGroup_FLUSH_ENTITY
232231
.listeners();
233232

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java

+16-32
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.hibernate.TransientObjectException;
1414
import org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer;
1515
import org.hibernate.bytecode.spi.BytecodeEnhancementMetadata;
16-
import org.hibernate.classic.Lifecycle;
1716
import org.hibernate.engine.internal.CascadePoint;
1817
import org.hibernate.engine.internal.Nullability;
1918
import org.hibernate.engine.spi.EntityEntry;
@@ -22,13 +21,13 @@
2221
import org.hibernate.engine.spi.Status;
2322
import org.hibernate.event.internal.OnUpdateVisitor;
2423
import org.hibernate.event.internal.PostDeleteEventListenerStandardImpl;
24+
import org.hibernate.event.service.spi.EventListenerGroups;
2525
import org.hibernate.event.service.spi.JpaBootstrapSensitive;
2626
import org.hibernate.event.spi.DeleteContext;
2727
import org.hibernate.event.spi.DeleteEvent;
2828
import org.hibernate.event.spi.DeleteEventListener;
2929
import org.hibernate.event.spi.EventSource;
3030
import org.hibernate.internal.EmptyInterceptor;
31-
import org.hibernate.internal.FastSessionServices;
3231
import org.hibernate.jpa.event.spi.CallbackRegistry;
3332
import org.hibernate.jpa.event.spi.CallbackRegistryConsumer;
3433
import org.hibernate.jpa.event.spi.CallbackType;
@@ -205,17 +204,6 @@ private CompletionStage<Void> fetchAndDelete(DeleteEvent event, DeleteContext tr
205204

206205
}
207206

208-
protected boolean invokeDeleteLifecycle(EventSource session, Object entity, EntityPersister persister) {
209-
if ( persister.implementsLifecycle() ) {
210-
LOG.debug( "Calling onDelete()" );
211-
if ( ( (Lifecycle) entity ).onDelete( session ) ) {
212-
LOG.debug( "Deletion vetoed by onDelete()" );
213-
return true;
214-
}
215-
}
216-
return false;
217-
}
218-
219207
private CompletionStage<Void> deleteTransientInstance(DeleteEvent event, DeleteContext transientEntities, Object entity) {
220208
LOG.trace( "Entity was not persistent in delete processing" );
221209

@@ -291,31 +279,27 @@ private CompletionStage<Void> delete(
291279
Object version,
292280
EntityEntry entry) {
293281
callbackRegistry.preRemove( entity );
294-
if ( !invokeDeleteLifecycle( source, entity, persister ) ) {
295-
return deleteEntity(
296-
source,
297-
entity,
298-
entry,
299-
event.isCascadeDeleteEnabled(),
300-
event.isOrphanRemovalBeforeUpdates(),
301-
persister,
302-
transientEntities
303-
)
304-
.thenAccept( v -> {
305-
if ( source.getFactory().getSessionFactoryOptions().isIdentifierRollbackEnabled() ) {
306-
persister.resetIdentifier( entity, id, version, source );
307-
}
308-
} );
309-
}
310-
return voidFuture();
282+
return deleteEntity(
283+
source,
284+
entity,
285+
entry,
286+
event.isCascadeDeleteEnabled(),
287+
event.isOrphanRemovalBeforeUpdates(),
288+
persister,
289+
transientEntities
290+
)
291+
.thenAccept( v -> {
292+
if ( source.getFactory().getSessionFactoryOptions().isIdentifierRollbackEnabled() ) {
293+
persister.resetIdentifier( entity, id, version, source );
294+
}
295+
} );
311296
}
312297

313298
/**
314299
* Can we delete the row represented by the proxy without loading the entity?
315300
*/
316301
private boolean canBeDeletedWithoutLoading(EventSource source, EntityPersister persister) {
317302
return source.getInterceptor() == EmptyInterceptor.INSTANCE
318-
&& !persister.implementsLifecycle()
319303
&& !persister.hasSubclasses() //TODO: should be unnecessary, using EntityPersister.getSubclassPropertyTypeClosure(), etc
320304
&& !persister.hasCascadeDelete()
321305
&& !persister.hasNaturalIdentifier()
@@ -325,7 +309,7 @@ private boolean canBeDeletedWithoutLoading(EventSource source, EntityPersister p
325309
}
326310

327311
private static boolean hasCustomEventListeners(EventSource source) {
328-
final FastSessionServices fss = source.getFactory().getFastSessionServices();
312+
final EventListenerGroups fss = source.getFactory().getEventListenerGroups();
329313
// Bean Validation adds a PRE_DELETE listener
330314
// and Envers adds a POST_DELETE listener
331315
return fss.eventListenerGroup_PRE_DELETE.count() > 0

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLoadEventListener.java

+20-18
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@
2727
import org.hibernate.event.spi.EventSource;
2828
import org.hibernate.event.spi.LoadEvent;
2929
import org.hibernate.event.spi.LoadEventListener;
30-
import org.hibernate.loader.ast.internal.CacheEntityLoaderHelper;
31-
import org.hibernate.loader.ast.internal.CacheEntityLoaderHelper.PersistenceContextEntry;
30+
import org.hibernate.loader.internal.CacheLoadHelper;
3231
import org.hibernate.metamodel.mapping.AttributeMapping;
3332
import org.hibernate.metamodel.mapping.AttributeMappingsList;
3433
import org.hibernate.metamodel.mapping.CompositeIdentifierMapping;
@@ -40,7 +39,6 @@
4039
import org.hibernate.proxy.HibernateProxy;
4140
import org.hibernate.proxy.LazyInitializer;
4241
import org.hibernate.reactive.event.ReactiveLoadEventListener;
43-
import org.hibernate.reactive.loader.entity.ReactiveCacheEntityLoaderHelper;
4442
import org.hibernate.reactive.logging.impl.Log;
4543
import org.hibernate.reactive.logging.impl.LoggerFactory;
4644
import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister;
@@ -49,7 +47,10 @@
4947

5048
import static org.hibernate.engine.internal.ManagedTypeHelper.asPersistentAttributeInterceptable;
5149
import static org.hibernate.engine.internal.ManagedTypeHelper.isPersistentAttributeInterceptable;
50+
import static org.hibernate.loader.internal.CacheLoadHelper.loadFromSecondLevelCache;
51+
import static org.hibernate.loader.internal.CacheLoadHelper.loadFromSessionCache;
5252
import static org.hibernate.pretty.MessageHelper.infoString;
53+
import static org.hibernate.proxy.HibernateProxy.extractLazyInitializer;
5354
import static org.hibernate.reactive.session.impl.SessionUtil.checkEntityFound;
5455
import static org.hibernate.reactive.session.impl.SessionUtil.throwEntityNotFound;
5556
import static org.hibernate.reactive.util.impl.CompletionStages.completedFuture;
@@ -399,7 +400,7 @@ private static CompletionStage<Object> loadWithProxyFactory(LoadEvent event, Ent
399400

400401
if ( proxy != null ) {
401402
LOG.trace( "Entity proxy found in session cache" );
402-
if ( LOG.isDebugEnabled() && HibernateProxy.extractLazyInitializer( proxy ).isUnwrap() ) {
403+
if ( LOG.isDebugEnabled() && extractLazyInitializer( proxy ).isUnwrap() ) {
403404
LOG.debug( "Ignoring NO_PROXY to honor laziness" );
404405
}
405406

@@ -429,7 +430,7 @@ private static PersistentAttributeInterceptable createBatchLoadableEnhancedProxy
429430
}
430431

431432
private static Object proxyOrCached(LoadEvent event, EntityPersister persister, EntityKey keyToLoad) {
432-
final Object cachedEntity = CacheEntityLoaderHelper.INSTANCE.loadFromSecondLevelCache(
433+
final Object cachedEntity = loadFromSecondLevelCache(
433434
event.getSession(),
434435
null,
435436
LockMode.NONE,
@@ -450,7 +451,7 @@ private static Object proxyOrCached(LoadEvent event, EntityPersister persister,
450451
return options.isCheckDeleted() && wasDeleted( persistenceContext, existing ) ? null : existing;
451452
}
452453
if ( persister.hasSubclasses() ) {
453-
final Object cachedEntity = CacheEntityLoaderHelper.INSTANCE.loadFromSecondLevelCache(
454+
final Object cachedEntity = loadFromSecondLevelCache(
454455
event.getSession(),
455456
null,
456457
LockMode.NONE,
@@ -652,9 +653,9 @@ private CompletionStage<Object> doLoad(
652653
return nullFuture();
653654
}
654655
else {
655-
final PersistenceContextEntry persistenceContextEntry =
656-
ReactiveCacheEntityLoaderHelper.INSTANCE.loadFromSessionCache( event, keyToLoad, options );
657-
final Object entity = persistenceContextEntry.getEntity();
656+
final CacheLoadHelper.PersistenceContextEntry persistenceContextEntry =
657+
loadFromSessionCache( keyToLoad, event.getLockOptions(), options, event.getSession() );
658+
final Object entity = persistenceContextEntry.entity();
658659
if ( entity != null ) {
659660
return persistenceContextEntry.isManaged() ? initializeIfNecessary( entity ) : nullFuture();
660661
}
@@ -668,9 +669,7 @@ private static CompletionStage<Object> initializeIfNecessary(Object entity) {
668669
if ( isPersistentAttributeInterceptable( entity ) ) {
669670
final PersistentAttributeInterceptable interceptable = asPersistentAttributeInterceptable( entity );
670671
final PersistentAttributeInterceptor interceptor = interceptable.$$_hibernate_getInterceptor();
671-
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor) {
672-
final EnhancementAsProxyLazinessInterceptor lazinessInterceptor =
673-
(EnhancementAsProxyLazinessInterceptor) interceptor;
672+
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) {
674673
final SharedSessionContractImplementor session = lazinessInterceptor.getLinkedSession();
675674
if ( session == null ) {
676675
throw LOG.sessionClosedLazyInitializationException();
@@ -691,7 +690,8 @@ private CompletionStage<Object> loadFromCacheOrDatasource(
691690
EntityPersister persister,
692691
EntityKey keyToLoad) {
693692
final EventSource session = event.getSession();
694-
final Object entity = CacheEntityLoaderHelper.INSTANCE.loadFromSecondLevelCache(event, persister, keyToLoad);
693+
final Object entity = session
694+
.loadFromSecondLevelCache( persister, keyToLoad, event.getInstanceToLoad(), event.getLockMode() );
695695
if ( entity != null ) {
696696
if ( LOG.isTraceEnabled() ) {
697697
LOG.tracev(
@@ -740,6 +740,10 @@ private void cacheNaturalId(LoadEvent event, EntityPersister persister, EventSou
740740
* @return The object loaded from the datasource, or null if not found.
741741
*/
742742
protected CompletionStage<Object> loadFromDatasource(LoadEvent event, EntityPersister persister) {
743+
if ( LOG.isTraceEnabled() ) {
744+
LOG.trace( "Entity not resolved in any cache, loading from datastore: "
745+
+ infoString( persister, event.getEntityId(), event.getFactory() ) );
746+
}
743747
return ( (ReactiveEntityPersister) persister )
744748
.reactiveLoad(
745749
event.getEntityId(),
@@ -754,16 +758,14 @@ protected CompletionStage<Object> loadFromDatasource(LoadEvent event, EntityPers
754758
// persister/loader/initializer sensitive to this fact - possibly
755759
// passing LoadType along
756760

757-
final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( entity );
758-
if ( lazyInitializer != null ) {
759-
entity = lazyInitializer.getImplementation();
760-
}
761+
final LazyInitializer lazyInitializer = extractLazyInitializer( entity );
762+
final Object impl = lazyInitializer != null ? lazyInitializer.getImplementation() : entity;
761763

762764
final StatisticsImplementor statistics = event.getSession().getFactory().getStatistics();
763765
if ( event.isAssociationFetch() && statistics.isStatisticsEnabled() ) {
764766
statistics.fetchEntity( event.getEntityClassName() );
765767
}
766-
return entity;
768+
return impl;
767769
} );
768770
}
769771
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveMergeEventListener.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@ protected Map<Object, Object> getMergeMap(MergeContext context) {
9494
@Override
9595
public CompletionStage<Void> reactiveOnMerge(MergeEvent event) throws HibernateException {
9696
final EventSource session = event.getSession();
97-
final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( session );
97+
final EntityCopyObserver entityCopyObserver = session.getFactory()
98+
.getEntityCopyObserver()
99+
.createEntityCopyObserver();
98100
final MergeContext mergeContext = new MergeContext( session, entityCopyObserver );
99101
return reactiveOnMerge( event, mergeContext )
100102
.thenAccept( v -> entityCopyObserver.topLevelMergeComplete( session ) )
@@ -104,10 +106,6 @@ public CompletionStage<Void> reactiveOnMerge(MergeEvent event) throws HibernateE
104106
} );
105107
}
106108

107-
private EntityCopyObserver createEntityCopyObserver(final EventSource session) {
108-
return session.getFactory().getFastSessionServices().entityCopyObserverFactory.createEntityCopyObserver();
109-
}
110-
111109
/**
112110
* Handle the given merge event.
113111
*

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactivePostLoadEventListener.java

-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package org.hibernate.reactive.event.impl;
77

88
import org.hibernate.AssertionFailure;
9-
import org.hibernate.classic.Lifecycle;
109
import org.hibernate.engine.spi.EntityEntry;
1110
import org.hibernate.event.spi.EventSource;
1211
import org.hibernate.event.spi.PostLoadEvent;
@@ -21,7 +20,6 @@
2120
/**
2221
* We do two things here:
2322
* <ul>
24-
* <li>Call {@link Lifecycle} interface if necessary</li>
2523
* <li>Perform needed {@link EntityEntry#getLockMode()} related processing</li>
2624
* </ul>
2725
*

0 commit comments

Comments
 (0)