Skip to content

Commit 9b86735

Browse files
blafondDavideD
authored andcommitted
[#1379] add reactiveForceFlush() ReactiveSession method
Signed-off-by: blafond <blafond@redhat.com>
1 parent 0fbf016 commit 9b86735

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/ReactiveSession.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.LockOptions;
1414
import org.hibernate.UnknownProfileException;
1515
import org.hibernate.collection.spi.PersistentCollection;
16+
import org.hibernate.engine.spi.EntityEntry;
1617
import org.hibernate.engine.spi.PersistenceContext;
1718
import org.hibernate.engine.spi.SessionImplementor;
1819
import org.hibernate.event.internal.MergeContext;
@@ -68,6 +69,8 @@ public interface ReactiveSession extends ReactiveQueryExecutor {
6869

6970
CompletionStage<Void> reactiveAutoflush();
7071

72+
CompletionStage<Void> reactiveForceFlush(EntityEntry entry);
73+
7174
CompletionStage<Void> reactiveRefresh(Object entity, LockOptions lockMode);
7275

7376
CompletionStage<Void> reactiveRefresh(Object child, IdentitySet refreshedAlready);

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,26 @@ public CompletionStage<Void> reactiveAutoflush() {
898898
return getHibernateFlushMode().lessThan( FlushMode.COMMIT ) ? voidFuture() : doFlush();
899899
}
900900

901+
@Override
902+
public CompletionStage<Void> reactiveForceFlush(EntityEntry entry) {
903+
if ( log.isDebugEnabled() ) {
904+
log.debugf(
905+
"Flushing to force deletion of re-saved object: %s",
906+
MessageHelper.infoString( entry.getPersister(), entry.getId(), getFactory() )
907+
);
908+
}
909+
910+
if ( getPersistenceContextInternal().getCascadeLevel() > 0 ) {
911+
return CompletionStages.failedFuture( new ObjectDeletedException(
912+
"deleted object would be re-saved by cascade (remove deleted object from associations)",
913+
entry.getId(),
914+
entry.getPersister().getEntityName()
915+
) );
916+
}
917+
checkOpenOrWaitingForAutoClose();
918+
return doFlush();
919+
}
920+
901921
private CompletionStage<Void> doFlush() {
902922
checkTransactionNeededForUpdateOperation( "no transaction is in progress" );
903923
pulseTransactionCoordinator();

0 commit comments

Comments
 (0)