Skip to content

Commit 3715364

Browse files
committed
temp
1 parent 770c9b1 commit 3715364

15 files changed

+156
-166
lines changed

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@ org.gradle.java.installations.auto-download=false
2424
##########################################################################
2525

2626
# Enable Testcontainers + Docker when present (value ignored)
27-
docker = true
27+
#docker = true
2828

2929
# The database type to use (key insensitive and support aliases):
3030
# Db2, MySql, PostgreSQL, CockroachDB, SqlServer, Oracle
3131
#db = MSSQL
3232

3333
# Enable the maven Central Snapshot repository, when set to any value (the value is ignored)
34-
#enableCentralSonatypeSnapshotsRep = true
34+
enableCentralSonatypeSnapshotsRep = true
3535

3636
# Enable the maven local repository (for local development when needed) when present (value ignored)
37-
enableMavenLocalRepo = true
37+
#enableMavenLocalRepo = true
3838

3939
### Settings the following properties will override the version defined in gradle/libs.versions.toml
4040

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -474,13 +474,9 @@ default CompletionStage<Object> reactiveInitializeEnhancedEntityUsedAsProxy(
474474
Object entity,
475475
String nameOfAttributeBeingAccessed,
476476
SharedSessionContractImplementor session) {
477-
478477
final BytecodeEnhancementMetadata enhancementMetadata = getEntityPersister().getBytecodeEnhancementMetadata();
479478
final BytecodeLazyAttributeInterceptor currentInterceptor = enhancementMetadata.extractLazyInterceptor( entity );
480-
if ( currentInterceptor instanceof EnhancementAsProxyLazinessInterceptor ) {
481-
final EnhancementAsProxyLazinessInterceptor proxyInterceptor =
482-
(EnhancementAsProxyLazinessInterceptor) currentInterceptor;
483-
479+
if ( currentInterceptor instanceof EnhancementAsProxyLazinessInterceptor proxyInterceptor ) {
484480
final EntityKey entityKey = proxyInterceptor.getEntityKey();
485481
final Object identifier = entityKey.getIdentifier();
486482

@@ -494,19 +490,17 @@ default CompletionStage<Object> reactiveInitializeEnhancedEntityUsedAsProxy(
494490
.handleEntityNotFound( entityKey.getEntityName(), identifier );
495491
}
496492

493+
final LazyAttributeLoadingInterceptor interceptor = enhancementMetadata
494+
.injectInterceptor( entity, identifier, session );
495+
497496
if ( nameOfAttributeBeingAccessed == null ) {
498497
return null;
499498
}
500499
else {
501-
final LazyAttributeLoadingInterceptor interceptor = enhancementMetadata
502-
.injectInterceptor( entity, identifier, session );
503500
return interceptor.readObject(
504-
entity,
505-
nameOfAttributeBeingAccessed,
506-
interceptor.isAttributeLoaded( nameOfAttributeBeingAccessed )
507-
? getPropertyValue( entity, nameOfAttributeBeingAccessed )
508-
: ( (LazyPropertyInitializer) this )
509-
.initializeLazyProperty( nameOfAttributeBeingAccessed, entity, session )
501+
entity, nameOfAttributeBeingAccessed, interceptor.isAttributeLoaded( nameOfAttributeBeingAccessed )
502+
? getPropertyValue( entity, nameOfAttributeBeingAccessed )
503+
: ( (LazyPropertyInitializer) this ).initializeLazyProperty( nameOfAttributeBeingAccessed, entity, session )
510504
);
511505
}
512506
} );
@@ -528,11 +522,12 @@ private CompletionStage<?> loadFromDatabaseOrCache(
528522
return completedFuture( loaded );
529523
}
530524
}
531-
return ( (ReactiveSingleIdEntityLoader<?>) determineLoaderToUse( session ) )
532-
.load( identifier, entity, LockOptions.NONE, session );
525+
final LockOptions lockOptions = new LockOptions();
526+
return ( (ReactiveSingleIdEntityLoader<?>) determineLoaderToUse( session, lockOptions ) )
527+
.load( identifier, entity, lockOptions, session );
533528
}
534529

535-
SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session);
530+
SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session, LockOptions lockOptions);
536531

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

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveJoinedSubclassEntityPersister.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ protected AttributeMapping buildPluralAttributeMapping(
139139
}
140140

141141
@Override
142-
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
143-
return super.determineLoaderToUse( session );
142+
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session, LockOptions lockOptions) {
143+
return super.determineLoaderToUse( session, lockOptions );
144144
}
145145

146146
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveSingleTableEntityPersister.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public GeneratedValuesMutationDelegate createInsertDelegate() {
8686
}
8787

8888
@Override
89-
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
90-
return super.determineLoaderToUse( session );
89+
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session, LockOptions lockOptions) {
90+
return super.determineLoaderToUse( session, lockOptions );
9191
}
9292

9393
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveUnionSubclassEntityPersister.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ protected AttributeMapping buildPluralAttributeMapping(
139139
}
140140

141141
@Override
142-
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session) {
143-
return super.determineLoaderToUse( session );
142+
public SingleIdEntityLoader<?> determineLoaderToUse(SharedSessionContractImplementor session, LockOptions lockOptions) {
143+
return super.determineLoaderToUse( session, lockOptions );
144144
}
145145

146146
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/impl/ReactiveServiceInitiators.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.hibernate.engine.jdbc.internal.SqlStatementLoggerInitiator;
2323
import org.hibernate.engine.jndi.internal.JndiServiceInitiator;
2424
import org.hibernate.event.internal.EntityCopyObserverFactoryInitiator;
25+
import org.hibernate.internal.util.cache.InternalCacheFactoryInitiator;
2526
import org.hibernate.persister.internal.PersisterFactoryInitiator;
2627
import org.hibernate.property.access.internal.PropertyAccessStrategyResolverInitiator;
2728
import org.hibernate.reactive.context.impl.VertxContextInitiator;
@@ -161,6 +162,9 @@ private static List<StandardServiceInitiator<?>> buildInitialServiceInitiatorLis
161162
// Custom for Hibernate Reactive: BatchLoaderFactory
162163
serviceInitiators.add( ReactiveBatchLoaderFactoryInitiator.INSTANCE );
163164

165+
// [standard] InternalCacheFactoryService
166+
serviceInitiators.add( InternalCacheFactoryInitiator.INSTANCE );
167+
164168
// --- end of services defined by Hibernate ORM
165169

166170
// --- custom ones follow:

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java

Lines changed: 64 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,12 @@ public void whenComplete(BiConsumer<Void, Throwable> consumer) {
319319

320320
private CompletionStage<Void> recreateCollections(Object entity, Object id, EntityPersister persister) {
321321
final Completable<Void> stage = new Completable<>();
322+
final String entityName = persister.getEntityName();
323+
final EventMonitor eventMonitor = getEventMonitor();
322324
final Loop loop = new Loop();
323325
forEachOwnedCollection(
324326
entity, id, persister, (descriptor, collection) -> {
325-
firePreRecreate( collection, descriptor );
326-
final EventMonitor eventMonitor = getEventMonitor();
327+
firePreRecreate( collection, descriptor, entityName, entity );
327328
final DiagnosticEvent event = eventMonitor.beginCollectionRecreateEvent();
328329
loop.then( () -> supplyStage( () -> ( (ReactiveCollectionPersister) descriptor )
329330
.reactiveRecreate( collection, id, this ) )
@@ -335,7 +336,7 @@ private CompletionStage<Void> recreateCollections(Object entity, Object id, Enti
335336
if ( statistics.isStatisticsEnabled() ) {
336337
statistics.recreateCollection( descriptor.getRole() );
337338
}
338-
firePostRecreate( collection, descriptor );
339+
firePostRecreate( collection, id, entityName, descriptor );
339340
} )
340341
);
341342
}
@@ -480,29 +481,35 @@ public CompletionStage<Void> reactiveDelete(Object entity) {
480481
}
481482

482483
private CompletionStage<Void> removeCollections(Object entity, Object id, EntityPersister persister) {
483-
final Completable<Void> stage = new Completable<>();
484-
final Loop loop = new Loop();
485-
forEachOwnedCollection( entity, id, persister,
486-
(descriptor, collection) -> {
487-
firePreRemove( collection, entity, descriptor );
488-
final EventMonitor eventMonitor = getEventMonitor();
489-
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
490-
loop.then( () -> supplyStage( () -> ( (ReactiveCollectionPersister) descriptor )
491-
.reactiveRemove( id, this ) )
492-
.whenComplete( (unused, throwable) -> eventMonitor
493-
.completeCollectionRemoveEvent( event, id, descriptor.getRole(), throwable != null, this )
494-
)
495-
.thenAccept( v -> {
496-
firePostRemove( collection, entity, descriptor );
497-
final StatisticsImplementor statistics = getFactory().getStatistics();
498-
if ( statistics.isStatisticsEnabled() ) {
499-
statistics.removeCollection( descriptor.getRole() );
500-
}
501-
} )
502-
);
503-
} );
504-
loop.whenComplete( stage::complete );
505-
return stage.getStage();
484+
if ( persister.hasOwnedCollections() ) {
485+
final Loop loop = new Loop();
486+
final Completable<Void> stage = new Completable<>();
487+
final String entityName = persister.getEntityName();
488+
forEachOwnedCollection(
489+
entity, id, persister,
490+
(descriptor, collection) -> {
491+
firePreRemove( collection, id, entityName, entity );
492+
final EventMonitor eventMonitor = getEventMonitor();
493+
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
494+
loop.then( () -> supplyStage( () -> ( (ReactiveCollectionPersister) descriptor )
495+
.reactiveRemove( id, this ) )
496+
.whenComplete( (unused, throwable) -> eventMonitor
497+
.completeCollectionRemoveEvent( event, id, descriptor.getRole(), throwable != null, this )
498+
)
499+
.thenAccept( v -> {
500+
firePostRemove( collection, id, entityName, entity );
501+
final StatisticsImplementor statistics = getFactory().getStatistics();
502+
if ( statistics.isStatisticsEnabled() ) {
503+
statistics.removeCollection( descriptor.getRole() );
504+
}
505+
} )
506+
);
507+
}
508+
);
509+
loop.whenComplete( stage::complete );
510+
return stage.getStage();
511+
}
512+
return voidFuture();
506513
}
507514

508515
@Override
@@ -561,31 +568,37 @@ private CompletionStage<Void> executeReactiveUpdate(Object entity) {
561568
}
562569

563570
private CompletionStage<Void> removeAndRecreateCollections(Object entity, Object id, EntityPersister persister) {
564-
final Completable<Void> stage = new Completable<>();
565-
final Loop loop = new Loop();
566-
forEachOwnedCollection( entity, id, persister,
567-
(descriptor, collection) -> {
568-
firePreUpdate( collection, descriptor );
569-
final EventMonitor eventMonitor = getEventMonitor();
570-
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
571-
ReactiveCollectionPersister reactivePersister = (ReactiveCollectionPersister) persister;
572-
loop.then( () -> supplyStage( () -> reactivePersister
573-
.reactiveRemove( id, this )
574-
.thenCompose( v -> reactivePersister.reactiveRecreate( collection, id, this ) ) )
575-
.whenComplete( (unused, throwable) -> eventMonitor
576-
.completeCollectionRemoveEvent( event, id, descriptor.getRole(), throwable != null, this )
577-
)
578-
.thenAccept( v -> {
579-
firePostUpdate( collection, descriptor );
580-
final StatisticsImplementor statistics = getFactory().getStatistics();
581-
if ( statistics.isStatisticsEnabled() ) {
582-
statistics.updateCollection( descriptor.getRole() );
583-
}
584-
} )
585-
);
586-
} );
587-
loop.whenComplete( stage::complete );
588-
return stage.getStage();
571+
if ( persister.hasOwnedCollections() ) {
572+
final String entityName = persister.getEntityName();
573+
final Completable<Void> stage = new Completable<>();
574+
final Loop loop = new Loop();
575+
forEachOwnedCollection(
576+
entity, id, persister,
577+
(descriptor, collection) -> {
578+
firePreUpdate( collection, id, entityName, entity );
579+
final EventMonitor eventMonitor = getEventMonitor();
580+
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
581+
ReactiveCollectionPersister reactivePersister = (ReactiveCollectionPersister) persister;
582+
loop.then( () -> supplyStage( () -> reactivePersister
583+
.reactiveRemove( id, this )
584+
.thenCompose( v -> reactivePersister.reactiveRecreate( collection, id, this ) ) )
585+
.whenComplete( (unused, throwable) -> eventMonitor
586+
.completeCollectionRemoveEvent( event, id, descriptor.getRole(), throwable != null, this )
587+
)
588+
.thenAccept( v -> {
589+
firePostUpdate( collection, id, entityName, entity);
590+
final StatisticsImplementor statistics = getFactory().getStatistics();
591+
if ( statistics.isStatisticsEnabled() ) {
592+
statistics.updateCollection( descriptor.getRole() );
593+
}
594+
} )
595+
);
596+
}
597+
);
598+
loop.whenComplete( stage::complete );
599+
return stage.getStage();
600+
}
601+
return voidFuture();
589602
}
590603

591604
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/embeddable/internal/ReactiveEmbeddableFetchImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,8 @@ public ReactiveEmbeddableFetchImpl(EmbeddableFetchImpl original) {
3838
}
3939

4040
@Override
41-
public EmbeddableInitializer<?> createInitializer(
42-
InitializerParent<?> parent,
43-
AssemblerCreationState creationState) {
44-
return new ReactiveEmbeddableInitializerImpl( this, getDiscriminatorFetch(), parent, creationState, true );
41+
public EmbeddableInitializer<?> createInitializer(InitializerParent<?> parent, AssemblerCreationState creationState) {
42+
return new ReactiveEmbeddableInitializerImpl( this, getDiscriminatorFetch(), getNullIndicatorResult(), parent, creationState, true );
4543
}
4644

4745
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/embeddable/internal/ReactiveEmbeddableForeignKeyResultImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ReactiveEmbeddableForeignKeyResultImpl(EmbeddableForeignKeyResultImpl<T>
2020
@Override
2121
public EmbeddableInitializer<?> createInitializer(InitializerParent parent, AssemblerCreationState creationState) {
2222
return getReferencedModePart() instanceof NonAggregatedIdentifierMapping
23-
? new ReactiveNonAggregatedIdentifierMappingInitializer( this, null, creationState, true )
24-
: new ReactiveEmbeddableInitializerImpl( this, null, null, creationState, true );
23+
? new ReactiveNonAggregatedIdentifierMappingInitializer( this, null, creationState, true )
24+
: new ReactiveEmbeddableInitializerImpl( this, null, null, null, creationState, true );
2525
}
2626
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/embeddable/internal/ReactiveEmbeddableInitializerImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.hibernate.reactive.sql.results.graph.ReactiveDomainResultsAssembler;
1717
import org.hibernate.reactive.sql.results.graph.ReactiveInitializer;
1818
import org.hibernate.sql.results.graph.AssemblerCreationState;
19+
import org.hibernate.sql.results.graph.DomainResult;
1920
import org.hibernate.sql.results.graph.DomainResultAssembler;
2021
import org.hibernate.sql.results.graph.Initializer;
2122
import org.hibernate.sql.results.graph.InitializerData;
@@ -66,10 +67,11 @@ public EmbeddableMappingType.ConcreteEmbeddableType getConcreteEmbeddableType()
6667
public ReactiveEmbeddableInitializerImpl(
6768
EmbeddableResultGraphNode resultDescriptor,
6869
BasicFetch<?> discriminatorFetch,
70+
DomainResult<Boolean> nullIndicatorResult,
6971
InitializerParent<?> parent,
7072
AssemblerCreationState creationState,
7173
boolean isResultInitializer) {
72-
super( resultDescriptor, discriminatorFetch, parent, creationState, isResultInitializer );
74+
super( resultDescriptor, discriminatorFetch, nullIndicatorResult, parent, creationState, isResultInitializer );
7375
}
7476

7577
@Override

0 commit comments

Comments
 (0)