Skip to content

Commit 22da4d9

Browse files
committed
New unwrap methods
1 parent 371113b commit 22da4d9

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionImpl.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import jakarta.persistence.EntityGraph;
1212
import jakarta.persistence.FlushModeType;
1313
import jakarta.persistence.LockModeType;
14+
import jakarta.persistence.PersistenceException;
1415
import jakarta.persistence.criteria.CriteriaDelete;
1516
import jakarta.persistence.criteria.CriteriaQuery;
1617
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -24,6 +25,7 @@
2425
import org.hibernate.reactive.common.AffectedEntities;
2526
import org.hibernate.reactive.common.Identifier;
2627
import org.hibernate.reactive.common.ResultSetMapping;
28+
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
2729
import org.hibernate.reactive.logging.impl.Log;
2830
import org.hibernate.reactive.logging.impl.LoggerFactory;
2931
import org.hibernate.reactive.mutiny.Mutiny;
@@ -32,6 +34,8 @@
3234
import org.hibernate.reactive.mutiny.Mutiny.SelectionQuery;
3335
import org.hibernate.reactive.pool.ReactiveConnection;
3436
import org.hibernate.reactive.query.sqm.iternal.ReactiveQuerySqmImpl;
37+
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
38+
import org.hibernate.reactive.session.ReactiveQueryProducer;
3539
import org.hibernate.reactive.session.ReactiveSession;
3640

3741
import java.lang.invoke.MethodHandles;
@@ -538,4 +542,21 @@ public <T> EntityGraph<T> createEntityGraph(Class<T> rootType) {
538542
public <T> EntityGraph<T> createEntityGraph(Class<T> rootType, String graphName) {
539543
return delegate.createEntityGraph( rootType, graphName );
540544
}
545+
546+
public <T> T unwrap(Class<T> clazz) {
547+
if ( ReactiveConnectionSupplier.class.isAssignableFrom( clazz ) ) {
548+
return clazz.cast( this.delegate );
549+
}
550+
else if ( ReactiveSession.class.isAssignableFrom( clazz ) ) {
551+
return clazz.cast( this.delegate );
552+
}
553+
else if ( ReactiveQueryProducer.class.isAssignableFrom( clazz ) ) {
554+
return clazz.cast( this.delegate );
555+
}
556+
else if ( ReactiveSharedSessionContractImplementor.class.isAssignableFrom( clazz ) ) {
557+
return clazz.cast( this.delegate );
558+
}
559+
throw new PersistenceException( "Cannot unwrap type " + clazz );
560+
}
561+
541562
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import jakarta.persistence.EntityGraph;
1111
import jakarta.persistence.FlushModeType;
1212
import jakarta.persistence.LockModeType;
13+
import jakarta.persistence.PersistenceException;
1314
import jakarta.persistence.criteria.CriteriaDelete;
1415
import jakarta.persistence.criteria.CriteriaQuery;
1516
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -25,9 +26,12 @@
2526
import org.hibernate.reactive.common.Identifier;
2627
import org.hibernate.reactive.common.ResultSetMapping;
2728
import org.hibernate.reactive.engine.ReactiveActionQueue;
29+
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
2830
import org.hibernate.reactive.logging.impl.Log;
2931
import org.hibernate.reactive.logging.impl.LoggerFactory;
3032
import org.hibernate.reactive.pool.ReactiveConnection;
33+
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
34+
import org.hibernate.reactive.session.ReactiveQueryProducer;
3135
import org.hibernate.reactive.session.ReactiveSession;
3236
import org.hibernate.reactive.stage.Stage;
3337
import org.hibernate.reactive.stage.Stage.MutationQuery;
@@ -540,4 +544,20 @@ public <R> Query<R> createNativeQuery(String queryString) {
540544
public <R> Query<R> createNativeQuery(String queryString, AffectedEntities affectedEntities) {
541545
return new StageQueryImpl<>( delegate.createReactiveNativeQuery( queryString, affectedEntities ) );
542546
}
547+
548+
public <T> T unwrap(Class<T> clazz) {
549+
if ( ReactiveConnectionSupplier.class.isAssignableFrom( clazz ) ) {
550+
return clazz.cast( this.delegate );
551+
}
552+
else if ( ReactiveSession.class.isAssignableFrom( clazz ) ) {
553+
return clazz.cast( this.delegate );
554+
}
555+
else if ( ReactiveQueryProducer.class.isAssignableFrom( clazz ) ) {
556+
return clazz.cast( this.delegate );
557+
}
558+
else if ( ReactiveSharedSessionContractImplementor.class.isAssignableFrom( clazz ) ) {
559+
return clazz.cast( this.delegate );
560+
}
561+
throw new PersistenceException( "Cannot unwrap type " + clazz );
562+
}
543563
}

0 commit comments

Comments
 (0)