From fa8dbedd8f39638fdf1d03c6ecd37c6cef84e1c7 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 16 Dec 2025 12:25:00 +0100 Subject: [PATCH 1/4] [#2924] Fix use of JdbcSelect instead of JdbcOperationQuerySelect --- .../loader/ast/internal/DatabaseSnapshotExecutor.java | 4 ++-- .../internal/ReactiveCollectionBatchLoaderArrayParam.java | 4 ++-- .../internal/ReactiveCollectionBatchLoaderInPredicate.java | 4 ++-- .../ast/internal/ReactiveCollectionLoaderSingleKey.java | 4 ++-- .../internal/ReactiveCollectionLoaderSubSelectFetch.java | 4 ++-- .../ast/internal/ReactiveEntityBatchLoaderArrayParam.java | 4 ++-- .../ast/internal/ReactiveEntityBatchLoaderInPredicate.java | 4 ++-- .../reactive/loader/ast/internal/ReactiveLoaderHelper.java | 4 ++-- .../ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java | 6 +++--- .../ast/internal/ReactiveMultiIdEntityLoaderStandard.java | 4 ++-- .../loader/ast/internal/ReactiveMultiKeyLoadChunker.java | 6 +++--- .../ast/internal/ReactiveNaturalIdLoaderDelegate.java | 6 +++--- .../ReactiveSingleUniqueKeyEntityLoaderStandard.java | 6 +++--- .../entity/impl/ReactiveGeneratedValuesProcessor.java | 6 +++--- .../internal/cte/ReactiveAbstractCteMutationHandler.java | 4 ++-- .../sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java | 4 ++-- .../mutation/internal/cte/ReactiveCteSoftDeleteHandler.java | 4 ++-- .../sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java | 4 ++-- .../reactive/sql/exec/internal/lock/ReactiveTableLock.java | 4 ++-- 19 files changed, 43 insertions(+), 43 deletions(-) diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java index 6fc7d2720..19301a77a 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/DatabaseSnapshotExecutor.java @@ -35,11 +35,11 @@ import org.hibernate.sql.ast.tree.select.QuerySpec; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.graph.DomainResult; import org.hibernate.sql.results.graph.FetchParent; import org.hibernate.sql.results.graph.internal.ImmutableFetchList; @@ -56,7 +56,7 @@ class DatabaseSnapshotExecutor { private final EntityMappingType entityDescriptor; - private final JdbcOperationQuerySelect jdbcSelect; + private final JdbcSelect jdbcSelect; private final JdbcParametersList jdbcParameters; DatabaseSnapshotExecutor( diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java index 19d0acf24..251e77274 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderArrayParam.java @@ -26,7 +26,7 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; @@ -46,7 +46,7 @@ public class ReactiveCollectionBatchLoaderArrayParam extends ReactiveAbstractCol private final JdbcMapping arrayJdbcMapping; private final JdbcParameter jdbcParameter; private final SelectStatement sqlSelect; - private final JdbcOperationQuerySelect jdbcSelectOperation; + private final JdbcSelect jdbcSelectOperation; public ReactiveCollectionBatchLoaderArrayParam( int domainBatchSize, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java index 647fef7c1..cc6633c41 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionBatchLoaderInPredicate.java @@ -21,7 +21,7 @@ import org.hibernate.metamodel.mapping.PluralAttributeMapping; import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; @@ -36,7 +36,7 @@ public class ReactiveCollectionBatchLoaderInPredicate extends ReactiveAbstractCo private final int sqlBatchSize; private final JdbcParametersList jdbcParameters; private final SelectStatement sqlAst; - private final JdbcOperationQuerySelect jdbcSelect; + private final JdbcSelect jdbcSelect; private ReactiveCollectionLoaderSingleKey singleKeyLoader; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java index f01a262d6..cbd8ba52d 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSingleKey.java @@ -26,10 +26,10 @@ import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; /** @@ -98,7 +98,7 @@ public CompletionStage> reactiveLoad(Object key, SharedS ); assert offset == jdbcParameters.size(); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator( sessionFactory, sqlAst ) .translate( jdbcParameterBindings, QueryOptions.NONE ); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java index 966150e81..7a805d2a4 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveCollectionLoaderSubSelectFetch.java @@ -24,7 +24,7 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.SqlAstTranslatorFactory; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.graph.DomainResult; import org.hibernate.sql.results.internal.ResultsHelper; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; @@ -84,7 +84,7 @@ public CompletionStage> reactiveLoad(Object triggerKey, } } - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator( sessionFactory, getSqlAst() ) .translate( this.subselect.getLoadingJdbcParameterBindings(), QueryOptions.NONE ); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java index d42b43c28..34fb2c691 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderArrayParam.java @@ -25,9 +25,9 @@ import org.hibernate.reactive.loader.ast.spi.ReactiveSingleIdEntityLoader; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; import static org.hibernate.loader.ast.internal.MultiKeyLoadLogging.MULTI_KEY_LOAD_LOGGER; @@ -43,7 +43,7 @@ public class ReactiveEntityBatchLoaderArrayParam extends ReactiveSingleIdEnti private JdbcMapping arrayJdbcMapping; private JdbcParameter jdbcParameter; private SelectStatement sqlAst; - private JdbcOperationQuerySelect jdbcSelectOperation; + private JdbcSelect jdbcSelectOperation; public ReactiveEntityBatchLoaderArrayParam( int domainBatchSize, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java index 04e5c681c..e54244741 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveEntityBatchLoaderInPredicate.java @@ -23,9 +23,9 @@ import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import static org.hibernate.internal.util.collections.CollectionHelper.arrayList; import static org.hibernate.loader.ast.internal.MultiKeyLoadLogging.MULTI_KEY_LOAD_LOGGER; @@ -41,7 +41,7 @@ public class ReactiveEntityBatchLoaderInPredicate extends ReactiveSingleIdEnt private JdbcParametersList jdbcParameters; private SelectStatement sqlAst; - private JdbcOperationQuerySelect jdbcSelectOperation; + private JdbcSelect jdbcSelectOperation; /** * @param domainBatchSize The maximum number of entities we will initialize for each {@link #load load} diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java index bf9eb01f2..ca5a5a65a 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveLoaderHelper.java @@ -29,11 +29,11 @@ import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; import static java.util.Objects.requireNonNull; @@ -67,7 +67,7 @@ public static X[] createTypedArray(Class elementClass, @SuppressWarnings( public static CompletionStage> loadByArrayParameter( K[] idsToInitialize, SelectStatement sqlAst, - JdbcOperationQuerySelect jdbcOperation, + JdbcSelect jdbcOperation, JdbcParameter jdbcParameter, JdbcMapping arrayJdbcMapping, Object entityId, diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java index ba5480359..de157b9d8 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderArrayParam.java @@ -33,12 +33,12 @@ import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.internal.JdbcParameterImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; import static org.hibernate.event.spi.LoadEventListener.GET; @@ -160,7 +160,7 @@ protected CompletionStage> performOrderedMultiLoad( jdbcParameter, getSessionFactory() ); - final JdbcOperationQuerySelect jdbcSelectOperation = getSessionFactory().getJdbcServices() + final JdbcSelect jdbcSelectOperation = getSessionFactory().getJdbcServices() .getJdbcEnvironment() .getSqlAstTranslatorFactory() .buildSelectTranslator( getSessionFactory(), sqlAst ) @@ -262,7 +262,7 @@ protected CompletionStage> performUnorderedMultiLoad( getSessionFactory() ); - final JdbcOperationQuerySelect jdbcSelectOperation = getSessionFactory().getJdbcServices() + final JdbcSelect jdbcSelectOperation = getSessionFactory().getJdbcServices() .getJdbcEnvironment() .getSqlAstTranslatorFactory() .buildSelectTranslator( getSessionFactory(), sqlAst ) diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java index a99f18768..663ae279f 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiIdEntityLoaderStandard.java @@ -38,10 +38,10 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; import static org.hibernate.event.spi.LoadEventListener.GET; @@ -244,7 +244,7 @@ private CompletionStage> loadEntitiesById( // we should have used all the JdbcParameter references (created bindings for all) assert offset == jdbcParameters.size(); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator( getSessionFactory(), sqlAst ) .translate( jdbcParameterBindings, QueryOptions.NONE ); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java index aca9f2ee4..153569b20 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveMultiKeyLoadChunker.java @@ -11,11 +11,11 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.ExecutionContext; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.internal.RowTransformerStandardImpl; import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture; @@ -53,7 +53,7 @@ interface ChunkBoundaryListener { private final JdbcParametersList jdbcParameters; private final SelectStatement sqlAst; - private final JdbcOperationQuerySelect jdbcSelect; + private final JdbcSelect jdbcSelect; public ReactiveMultiKeyLoadChunker( int chunkSize, @@ -61,7 +61,7 @@ public ReactiveMultiKeyLoadChunker( Bindable bindable, JdbcParametersList jdbcParameters, SelectStatement sqlAst, - JdbcOperationQuerySelect jdbcSelect) { + JdbcSelect jdbcSelect) { this.chunkSize = chunkSize; this.keyColumnCount = keyColumnCount; this.bindable = bindable; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java index c9b2ae280..5ac311f65 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveNaturalIdLoaderDelegate.java @@ -38,11 +38,11 @@ import org.hibernate.sql.ast.tree.select.QuerySpec; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.graph.DomainResult; import org.hibernate.sql.results.graph.Fetch; import org.hibernate.sql.results.graph.FetchParent; @@ -171,7 +171,7 @@ public CompletionStage resolveIdToNaturalId(Object id, SharedSessionCont ); assert offset == jdbcParameters.size(); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlSelect ) @@ -268,7 +268,7 @@ public CompletionStage reactiveSelectByNaturalId( ); final QueryOptions queryOptions = new SimpleQueryOptions( lockOptions, false ); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator( sessionFactory, sqlSelect ) .translate( jdbcParamBindings, queryOptions ); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java index 6029b610e..07354562b 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/loader/ast/internal/ReactiveSingleUniqueKeyEntityLoaderStandard.java @@ -30,11 +30,11 @@ import org.hibernate.sql.ast.SqlAstTranslatorFactory; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.Callback; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; /** * @@ -93,7 +93,7 @@ public CompletionStage load(Object ukValue, LockOptions lockOptions, Boolean session ); assert offset == jdbcParameters.size(); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory .buildSelectTranslator( sessionFactory, sqlAst ) .translate( jdbcParameterBindings, QueryOptions.NONE ); @@ -149,7 +149,7 @@ public Object resolveId(Object ukValue, SharedSessionContractImplementor session session ); assert offset == jdbcParameters.size(); - final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst ) + final JdbcSelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator( sessionFactory, sqlAst ) .translate( jdbcParameterBindings, QueryOptions.NONE ); return StandardReactiveSelectExecutor.INSTANCE diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java index 6ad0bb55d..32d77c345 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveGeneratedValuesProcessor.java @@ -15,10 +15,10 @@ import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; import org.hibernate.sql.ast.tree.select.SelectStatement; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import org.hibernate.sql.exec.spi.JdbcParametersList; +import org.hibernate.sql.exec.spi.JdbcSelect; import static org.hibernate.internal.util.NullnessUtil.castNonNull; import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture; @@ -31,11 +31,11 @@ class ReactiveGeneratedValuesProcessor { private final SelectStatement selectStatement; private final List generatedValuesToSelect; private final JdbcParametersList jdbcParameters; - private final JdbcOperationQuerySelect jdbcSelect; + private final JdbcSelect jdbcSelect; private final EntityMappingType entityDescriptor; ReactiveGeneratedValuesProcessor(SelectStatement selectStatement, - JdbcOperationQuerySelect jdbcSelect, + JdbcSelect jdbcSelect, List generatedValuesToSelect, JdbcParametersList jdbcParameters, EntityMappingType entityDescriptor) { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java index 07e3406ee..eebd9e14f 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveAbstractCteMutationHandler.java @@ -12,8 +12,8 @@ import org.hibernate.reactive.query.sqm.mutation.spi.ReactiveAbstractMutationHandler; import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor; import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; import java.util.concurrent.CompletionStage; @@ -48,5 +48,5 @@ default CompletionStage reactiveExecute( ); } - JdbcOperationQuerySelect getSelect(); + JdbcSelect getSelect(); } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java index d2d6255a2..0384179c4 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteDeleteHandler.java @@ -13,8 +13,8 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteMutationStrategy; import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; /** * @see org.hibernate.query.sqm.mutation.internal.cte.CteDeleteHandler @@ -33,7 +33,7 @@ protected ReactiveCteDeleteHandler( } @Override - public JdbcOperationQuerySelect getSelect() { + public JdbcSelect getSelect() { return super.getSelect(); } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java index df4096335..fe0f6959b 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteSoftDeleteHandler.java @@ -12,8 +12,8 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteSoftDeleteHandler; import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; public class ReactiveCteSoftDeleteHandler extends CteSoftDeleteHandler implements ReactiveAbstractCteMutationHandler { protected ReactiveCteSoftDeleteHandler( @@ -36,7 +36,7 @@ protected ReactiveCteSoftDeleteHandler( } @Override - public JdbcOperationQuerySelect getSelect() { + public JdbcSelect getSelect() { return super.getSelect(); } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java index 11d53bac3..630856220 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/cte/ReactiveCteUpdateHandler.java @@ -12,8 +12,8 @@ import org.hibernate.query.sqm.mutation.internal.cte.CteUpdateHandler; import org.hibernate.query.sqm.tree.update.SqmUpdateStatement; import org.hibernate.sql.ast.tree.cte.CteTable; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; +import org.hibernate.sql.exec.spi.JdbcSelect; /** * @see CteUpdateHandler @@ -32,7 +32,7 @@ public ReactiveCteUpdateHandler( } @Override - public JdbcOperationQuerySelect getSelect() { + public JdbcSelect getSelect() { return super.getSelect(); } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/lock/ReactiveTableLock.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/lock/ReactiveTableLock.java index 3643ed716..692e8ede7 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/lock/ReactiveTableLock.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/lock/ReactiveTableLock.java @@ -21,9 +21,9 @@ import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.BaseExecutionContext; -import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect; import org.hibernate.sql.exec.internal.lock.EntityDetails; import org.hibernate.sql.exec.internal.lock.TableLock; +import org.hibernate.sql.exec.spi.JdbcSelect; import org.hibernate.sql.results.graph.DomainResult; import java.lang.invoke.MethodHandles; @@ -94,7 +94,7 @@ public CompletionStage reactivePerformActions( final var jdbcServices = sessionFactory.getJdbcServices(); final var selectStatement = new SelectStatement( querySpec, domainResults ); - final JdbcOperationQuerySelect jdbcSelect = jdbcServices.getDialect().getSqlAstTranslatorFactory() + final JdbcSelect jdbcSelect = jdbcServices.getDialect().getSqlAstTranslatorFactory() .buildSelectTranslator( sessionFactory, selectStatement ) .translate( jdbcParameterBindings, lockingQueryOptions ); return StandardReactiveSelectExecutor.INSTANCE From 35a1b2d467bbe5ccbeec99ddae9db97750ab1110 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 16 Dec 2025 12:48:11 +0100 Subject: [PATCH 2/4] [#2924] Fix ReactiveCompoundNaturalIdMapping constructor --- .../internal/ReactiveCompoundNaturalIdMapping.java | 11 +++++++---- .../entity/impl/ReactiveAbstractEntityPersister.java | 6 +++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveCompoundNaturalIdMapping.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveCompoundNaturalIdMapping.java index 1190c891d..165e88ce3 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveCompoundNaturalIdMapping.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/metamodel/mapping/internal/ReactiveCompoundNaturalIdMapping.java @@ -13,6 +13,7 @@ import org.hibernate.metamodel.mapping.SingularAttributeMapping; import org.hibernate.metamodel.mapping.internal.CompoundNaturalIdMapping; import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess; +import org.hibernate.models.spi.ClassDetails; import org.hibernate.reactive.loader.ast.internal.ReactiveCompoundNaturalIdLoader; import org.hibernate.reactive.logging.impl.Log; import org.hibernate.reactive.logging.impl.LoggerFactory; @@ -21,10 +22,12 @@ public class ReactiveCompoundNaturalIdMapping extends CompoundNaturalIdMapping { private static final Log LOG = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - public ReactiveCompoundNaturalIdMapping(EntityMappingType declaringType, - List attributes, - MappingModelCreationProcess creationProcess ) { - super( declaringType, attributes, creationProcess ); + public ReactiveCompoundNaturalIdMapping( + EntityMappingType declaringType, + ClassDetails naturalIdClass, + List attributes, + MappingModelCreationProcess creationProcess) { + super( declaringType, naturalIdClass, attributes, creationProcess ); } @Override diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java index 57202d233..bcc2a9e95 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java @@ -576,7 +576,11 @@ default NaturalIdMapping generateNaturalIdMapping( throw new MappingException( "Expected multiple natural-id attributes, but found only one: " + getEntityName() ); } - return new ReactiveCompoundNaturalIdMapping( this, collectedAttrMappings, creationProcess ); + return new ReactiveCompoundNaturalIdMapping( + this, + bootEntityDescriptor.getRootClass().getNaturalIdClass(), + collectedAttrMappings, + creationProcess ); } @Override From 2442d89725303cc474b80123acbbd2b614ab4048 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Mon, 15 Dec 2025 18:06:15 +0100 Subject: [PATCH 3/4] [#2924] Fix DefaultReactiveLockEventListener compilation error --- .../DefaultReactiveLockEventListener.java | 58 ++++--------------- 1 file changed, 10 insertions(+), 48 deletions(-) diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java index 0830c2138..bc7f46e57 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java @@ -6,14 +6,13 @@ import java.util.concurrent.CompletionStage; +import org.hibernate.DetachedObjectException; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.LockOptions; import org.hibernate.ObjectDeletedException; -import org.hibernate.TransientObjectException; import org.hibernate.cache.spi.access.EntityDataAccess; import org.hibernate.cache.spi.access.SoftLock; -import org.hibernate.engine.internal.CascadePoint; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionImplementor; @@ -24,9 +23,6 @@ import org.hibernate.event.spi.LockEventListener; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.reactive.engine.ReactiveActionQueue; -import org.hibernate.reactive.engine.impl.Cascade; -import org.hibernate.reactive.engine.impl.CascadingActions; -import org.hibernate.reactive.engine.impl.ForeignKeys; import org.hibernate.reactive.engine.impl.ReactiveEntityIncrementVersionProcess; import org.hibernate.reactive.engine.impl.ReactiveEntityVerifyVersionProcess; import org.hibernate.reactive.event.ReactiveLockEventListener; @@ -38,8 +34,6 @@ import static java.lang.invoke.MethodHandles.lookup; import static org.hibernate.pretty.MessageHelper.infoString; import static org.hibernate.reactive.logging.impl.LoggerFactory.make; -import static org.hibernate.reactive.util.impl.CompletionStages.completedFuture; -import static org.hibernate.reactive.util.impl.CompletionStages.failedFuture; import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture; public class DefaultReactiveLockEventListener extends DefaultLockEventListener implements LockEventListener, ReactiveLockEventListener { @@ -53,15 +47,17 @@ public void onLock(LockEvent event) throws HibernateException { @Override public CompletionStage reactiveOnLock(LockEvent event) throws HibernateException { - if ( event.getObject() == null ) { + final Object instance = event.getObject(); + if ( instance == null ) { throw new NullPointerException( "attempted to lock null" ); } - if ( event.getLockMode() == LockMode.WRITE ) { + final var lockMode = event.getLockMode(); + if ( lockMode == LockMode.WRITE ) { throw LOG.invalidLockModeForLock(); } - if ( event.getLockMode() == LockMode.UPGRADE_SKIPLOCKED ) { + if ( lockMode == LockMode.UPGRADE_SKIPLOCKED ) { LOG.explicitSkipLockedLockCombo(); } @@ -80,7 +76,7 @@ public CompletionStage reactiveOnLock(LockEvent event) throws HibernateExc //TODO: if object was an uninitialized proxy, this is inefficient, // resulting in two SQL selects - return ( (ReactiveQueryProducer) source ).reactiveFetch( event.getObject(), true ) + return ( (ReactiveQueryProducer) source ).reactiveFetch( instance, true ) .thenCompose( entity -> reactiveOnLock( event, entity ) ); } @@ -88,46 +84,12 @@ private CompletionStage reactiveOnLock(LockEvent event, Object entity) { final SessionImplementor source = event.getSession(); final PersistenceContext persistenceContext = source.getPersistenceContextInternal(); final EntityEntry entry = persistenceContext.getEntry( entity ); - return lockEntry( event, entity, entry, source ) - .thenCompose( e -> upgradeLock( entity, e, event.getLockOptions(), event.getSession() ) ); - } - - private CompletionStage lockEntry( - LockEvent event, - Object entity, - EntityEntry entry, - SessionImplementor source) { - if ( entry == null ) { - final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); - final Object id = persister.getIdentifier( entity, source ); - return ForeignKeys - .isNotTransient( event.getEntityName(), entity, Boolean.FALSE, source ) - .thenCompose( trans -> { - if ( !trans ) { - return failedFuture( new TransientObjectException( - "Cannot lock unsaved transient instance of entity '" + persister.getEntityName() + "'" - ) ); - } - - final EntityEntry e = reassociate( event, entity, id, persister ); - return cascadeOnLock( event, persister, entity ) - .thenApply( v -> e ); - } - ); + if ( entry == null && event.getObject() == entity ) { + throw new DetachedObjectException( "Given entity is not associated with the persistence context" ); } - return completedFuture( entry ); + return upgradeLock( entity, entry, event.getLockOptions(), event.getSession() ); } - private CompletionStage cascadeOnLock(LockEvent event, EntityPersister persister, Object entity) { - return Cascade.cascade( - CascadingActions.LOCK, - CascadePoint.AFTER_LOCK, - event.getSession(), - persister, - entity, - event.getLockOptions() - ); - } /** * Performs a pessimistic lock upgrade on a given entity, if needed. From c42a5ddbca97ae9cea4f97820a26910f9d8ea7e3 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Tue, 16 Dec 2025 15:53:28 +0100 Subject: [PATCH 4/4] [#2924] DefaultReactiveRefreshEventListener: introduced DetachedObjectException --- .../DefaultReactiveRefreshEventListener.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java index 0d7c717cc..c0da56c2f 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveRefreshEventListener.java @@ -8,10 +8,10 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import org.hibernate.DetachedObjectException; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.LockOptions; -import org.hibernate.PersistentObjectException; import org.hibernate.UnresolvableObjectException; import org.hibernate.cache.spi.access.CollectionDataAccess; import org.hibernate.cache.spi.access.EntityDataAccess; @@ -110,21 +110,7 @@ private CompletionStage reactiveOnRefresh(RefreshEvent event, RefreshConte final EntityPersister persister; final Object id; if ( entry == null ) { - //refresh() does not pass an entityName - persister = source.getEntityPersister( event.getEntityName(), entity ); - id = persister.getIdentifier( entity, event.getSession() ); - if ( LOG.isTraceEnabled() ) { - LOG.tracev( - "Refreshing transient {0}", - infoString( persister, id, source.getFactory() ) - ); - } - if ( persistenceContext.getEntry( source.generateEntityKey( id, persister ) ) != null ) { - throw new PersistentObjectException( - "attempted to refresh transient instance when persistent instance was already associated with the session: " - + infoString( persister, id, source.getFactory() ) - ); - } + throw new DetachedObjectException( "Given entity is not associated with the persistence context" ); } else { if ( LOG.isTraceEnabled() ) {