Skip to content

Commit 9741e1d

Browse files
blafondDavideD
authored andcommitted
[#1379] replace orm forceFlush() call with reactiveForceFlush() in reactivePerformSave()
Signed-off-by: blafond <blafond@redhat.com>
1 parent 9b86735 commit 9741e1d

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

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

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.reactive.logging.impl.Log;
3636
import org.hibernate.reactive.logging.impl.LoggerFactory;
3737
import org.hibernate.reactive.session.ReactiveSession;
38+
import org.hibernate.reactive.util.impl.CompletionStages;
3839
import org.hibernate.type.Type;
3940
import org.hibernate.type.TypeHelper;
4041

@@ -162,34 +163,40 @@ protected CompletionStage<Void> reactivePerformSave(
162163
LOG.tracev( "Saving {0}", infoString( persister, id, source.getFactory() ) );
163164
}
164165

165-
final EntityKey key;
166-
if ( !useIdentityColumn ) {
167-
key = source.generateEntityKey( id, persister );
168-
final PersistenceContext persistenceContext = source.getPersistenceContextInternal();
169-
Object old = persistenceContext.getEntity( key );
170-
if ( old != null ) {
171-
if ( persistenceContext.getEntry( old ).getStatus() == Status.DELETED ) {
172-
source.forceFlush( persistenceContext.getEntry( old ) );
173-
}
174-
else {
175-
return failedFuture( new NonUniqueObjectException( id, persister.getEntityName() ) );
176-
}
177-
}
166+
CompletionStage<EntityKey> keyStage = useIdentityColumn
167+
? CompletionStages.nullFuture()
168+
: generateEntityKey( id, persister, source ).thenCompose( generatedKey -> {
178169
persister.setIdentifier( entity, id, source );
179-
}
180-
else {
181-
key = null;
182-
}
170+
return CompletionStages.completedFuture( generatedKey );
171+
} );
183172

184-
return reactivePerformSaveOrReplicate(
173+
return keyStage.thenCompose( key -> reactivePerformSaveOrReplicate(
185174
entity,
186175
key,
187176
persister,
188177
useIdentityColumn,
189178
context,
190179
source,
191180
requiresImmediateIdAccess
192-
);
181+
) );
182+
}
183+
184+
private CompletionStage<EntityKey> generateEntityKey(Serializable id, EntityPersister persister,
185+
EventSource source) {
186+
final EntityKey key = source.generateEntityKey( id, persister );
187+
final PersistenceContext persistenceContext = source.getPersistenceContextInternal();
188+
Object old = persistenceContext.getEntity( key );
189+
if ( old != null ) {
190+
if ( persistenceContext.getEntry( old ).getStatus() == Status.DELETED ) {
191+
return source.unwrap( ReactiveSession.class ).reactiveForceFlush(
192+
persistenceContext.getEntry( old ) ).thenApply( v -> key );
193+
}
194+
else {
195+
return failedFuture( new NonUniqueObjectException( id, persister.getEntityName() ) );
196+
}
197+
}
198+
199+
return CompletionStages.completedFuture( key );
193200
}
194201

195202
/**

0 commit comments

Comments
 (0)