Skip to content

Commit 57c7b4d

Browse files
committed
Refactor ReactiveSingleIdLoadPlan
1 parent 08dfebe commit 57c7b4d

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleIdLoadPlan.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@
2323
import org.hibernate.reactive.engine.impl.ReactiveCallbackImpl;
2424
import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor;
2525
import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer;
26+
import org.hibernate.reactive.util.impl.CompletionStages;
2627
import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor;
2728
import org.hibernate.sql.ast.tree.select.SelectStatement;
2829
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
2930
import org.hibernate.sql.exec.spi.Callback;
3031
import org.hibernate.sql.exec.spi.ExecutionContext;
3132
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
3233
import org.hibernate.sql.exec.spi.JdbcParametersList;
34+
import org.hibernate.sql.results.internal.RowTransformerStandardImpl;
35+
import org.hibernate.sql.results.spi.RowTransformer;
3336

37+
import static org.hibernate.reactive.util.impl.CompletionStages.nullFuture;
3438
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
3539

3640
public class ReactiveSingleIdLoadPlan<T> extends SingleIdLoadPlan<CompletionStage<T>> {
@@ -75,23 +79,27 @@ public CompletionStage<T> load(Object restrictedValue, Object entityInstance, Bo
7579
);
7680
// FIXME: Should we get this from jdbcServices.getSelectExecutor()?
7781
return StandardReactiveSelectExecutor.INSTANCE
78-
.list( getJdbcSelect(), jdbcParameterBindings, executionContext, getRowTransformer(), resultConsumer( singleResultExpected ) )
79-
.thenCompose( list -> {
80-
Object entity = extractEntity( list );
81-
return invokeAfterLoadActions( callback, session, entity )
82-
.thenApply( v -> (T) entity );
83-
}
84-
);
82+
.list( getJdbcSelect(), jdbcParameterBindings, executionContext, rowTransformer(), resultConsumer( singleResultExpected ) )
83+
.thenApply( this::extractEntity )
84+
.thenCompose( entity -> invokeAfterLoadActions( callback, session, entity ) );
8585
}
8686

87-
private <G> CompletionStage<Void> invokeAfterLoadActions(ReactiveCallbackImpl callback, SharedSessionContractImplementor session, G entity) {
87+
private RowTransformer<T> rowTransformer() {
88+
// At the moment, I'm not sure how to refactor the code so that getRowTransformer()
89+
// returns RowTransformer<T> instead of RowTransformer<CompletionStage<T>>.
90+
return (RowTransformer<T>) getRowTransformer()
91+
}
92+
93+
private CompletionStage<T> invokeAfterLoadActions(ReactiveCallbackImpl callback, SharedSessionContractImplementor session, T entity) {
8894
if ( entity != null && getLoadable() != null ) {
89-
return callback.invokeReactiveLoadActions( entity, (EntityMappingType) getLoadable(), session );
95+
return callback
96+
.invokeReactiveLoadActions( entity, (EntityMappingType) getLoadable(), session )
97+
.thenApply( v -> entity );
9098
}
91-
return voidFuture();
99+
return nullFuture();
92100
}
93101

94-
private Object extractEntity(List<?> list) {
102+
private T extractEntity(List<T> list) {
95103
return list.isEmpty() ? null : list.get( 0 );
96104
}
97105

0 commit comments

Comments
 (0)