Skip to content

Commit 0dd496b

Browse files
committed
[#1772] Upgrade Hibernate ORM to 6.2.11.Final
Fix compilation errors caused by HHH-16900: Iteration of MutationOperation(s) triggers type pollution * ORM PR: hibernate/hibernate-orm#6947 * Issue: https://hibernate.atlassian.net/browse/HHH-16900 This is a backport of changes that have been applied to `main`.
1 parent 6c8e4e7 commit 0dd496b

11 files changed

+68
-83
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Hibernate Reactive has been tested with:
3737
- CockroachDB 22.1
3838
- MS SQL Server 2019
3939
- Oracle 21.3
40-
- [Hibernate ORM][] 6.2.8.Final
40+
- [Hibernate ORM][] 6.2.11.Final
4141
- [Vert.x Reactive PostgreSQL Client](https://vertx.io/docs/vertx-pg-client/java/) 4.4.5
4242
- [Vert.x Reactive MySQL Client](https://vertx.io/docs/vertx-mysql-client/java/) 4.4.5
4343
- [Vert.x Reactive Db2 Client](https://vertx.io/docs/vertx-db2-client/java/) 4.4.5

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ version = projectVersion
5353
// ./gradlew clean build -PhibernateOrmVersion=5.6.15-SNAPSHOT
5454
ext {
5555
if ( !project.hasProperty('hibernateOrmVersion') ) {
56-
hibernateOrmVersion = '6.2.8.Final'
56+
hibernateOrmVersion = '6.2.11.Final'
5757
}
5858
if ( !project.hasProperty( 'hibernateOrmGradlePluginVersion' ) ) {
5959
// Same as ORM as default

gradle/version.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
projectVersion=2.0.5.Final
1+
projectVersion=2.0.6-SNAPSHOT

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/mutation/internal/ReactiveMutationExecutorPostInsert.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.engine.jdbc.mutation.ParameterUsage;
1313
import org.hibernate.engine.jdbc.mutation.TableInclusionChecker;
1414
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementDetails;
15+
import org.hibernate.engine.jdbc.mutation.internal.EntityMutationOperationGroup;
1516
import org.hibernate.engine.jdbc.mutation.internal.MutationExecutorPostInsert;
1617
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1718
import org.hibernate.persister.entity.mutation.EntityTableMapping;
@@ -21,7 +22,7 @@
2122
import org.hibernate.reactive.id.insert.ReactiveInsertGeneratedIdentifierDelegate;
2223
import org.hibernate.reactive.pool.ReactiveConnection;
2324
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
24-
import org.hibernate.sql.model.MutationOperationGroup;
25+
2526
import org.hibernate.sql.model.ValuesAnalysis;
2627

2728
import static org.hibernate.reactive.engine.jdbc.ResultsCheckerUtil.checkResults;
@@ -31,7 +32,7 @@
3132
public class ReactiveMutationExecutorPostInsert extends MutationExecutorPostInsert implements ReactiveMutationExecutor {
3233

3334
public ReactiveMutationExecutorPostInsert(
34-
MutationOperationGroup mutationOperationGroup,
35+
EntityMutationOperationGroup mutationOperationGroup,
3536
SharedSessionContractImplementor session) {
3637
super( mutationOperationGroup, session );
3738
}
@@ -49,17 +50,16 @@ public CompletionStage<Object> executeReactive(Object modelReference, ValuesAnal
4950
session
5051
)
5152
.thenApply( this::logId )
52-
.thenCompose(id -> {
53-
if (secondaryTablesStatementGroup == null) {
54-
return completedFuture(id);
53+
.thenCompose( id -> {
54+
if ( secondaryTablesStatementGroup == null ) {
55+
return completedFuture( id );
5556
}
56-
AtomicReference<CompletionStage<Object>> res = new AtomicReference<>(completedFuture(id));
57-
secondaryTablesStatementGroup
58-
.forEachStatement( (tableName, statementDetails) -> res
59-
.set( res.get().thenCompose( i -> reactiveExecuteWithId( i, tableName, statementDetails, inclusionChecker, resultChecker, session ) ) )
60-
);
57+
AtomicReference<CompletionStage<Object>> res = new AtomicReference<>( completedFuture( id ) );
58+
secondaryTablesStatementGroup.forEachStatement( (tableName, statementDetails) -> {
59+
res.set( res.get().thenCompose( i -> reactiveExecuteWithId( i, tableName, statementDetails, inclusionChecker, resultChecker, session ) ) );
60+
} );
6161
return res.get();
62-
});
62+
} );
6363
}
6464

6565
private Object logId(Object identifier) {
@@ -91,8 +91,10 @@ private CompletionStage<Object> reactiveExecuteWithId(
9191

9292
if ( inclusionChecker != null && !inclusionChecker.include( tableDetails ) ) {
9393
if ( MODEL_MUTATION_LOGGER.isTraceEnabled() ) {
94-
MODEL_MUTATION_LOGGER
95-
.tracef( "Skipping execution of secondary insert : %s", tableDetails.getTableName() );
94+
MODEL_MUTATION_LOGGER.tracef(
95+
"Skipping execution of secondary insert : %s",
96+
tableDetails.getTableName()
97+
);
9698
}
9799
return completedFuture( id );
98100
}
@@ -137,6 +139,4 @@ private CompletionStage<Object> reactiveExecuteWithId(
137139
valueBindings.afterStatement( tableDetails );
138140
} );
139141
}
140-
141-
142142
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/mutation/internal/ReactiveMutationExecutorPostInsertSingleTable.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
import org.hibernate.engine.jdbc.mutation.OperationResultChecker;
1111
import org.hibernate.engine.jdbc.mutation.TableInclusionChecker;
1212
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementDetails;
13+
import org.hibernate.engine.jdbc.mutation.internal.EntityMutationOperationGroup;
1314
import org.hibernate.engine.jdbc.mutation.internal.MutationExecutorPostInsertSingleTable;
1415
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1516
import org.hibernate.persister.entity.mutation.EntityMutationTarget;
1617
import org.hibernate.reactive.engine.jdbc.env.internal.ReactiveMutationExecutor;
1718
import org.hibernate.reactive.id.insert.ReactiveInsertGeneratedIdentifierDelegate;
18-
import org.hibernate.sql.model.MutationOperationGroup;
1919
import org.hibernate.sql.model.PreparableMutationOperation;
2020
import org.hibernate.sql.model.ValuesAnalysis;
2121

@@ -28,10 +28,11 @@ public class ReactiveMutationExecutorPostInsertSingleTable extends MutationExecu
2828
private final EntityMutationTarget mutationTarget;
2929
private final PreparedStatementDetails identityInsertStatementDetails;
3030

31-
public ReactiveMutationExecutorPostInsertSingleTable(MutationOperationGroup mutationOperationGroup, SharedSessionContractImplementor session) {
31+
public ReactiveMutationExecutorPostInsertSingleTable(EntityMutationOperationGroup mutationOperationGroup, SharedSessionContractImplementor session) {
3232
super( mutationOperationGroup, session );
33-
this.mutationTarget = (EntityMutationTarget) mutationOperationGroup.getMutationTarget();
34-
final PreparableMutationOperation operation = mutationOperationGroup.getOperation( mutationTarget.getIdentifierTableName() );
33+
this.mutationTarget = mutationOperationGroup.getMutationTarget();
34+
final PreparableMutationOperation operation = (PreparableMutationOperation) mutationOperationGroup
35+
.getOperation( mutationTarget.getIdentifierTableName() );
3536
this.identityInsertStatementDetails = identityPreparation( operation, session );
3637
}
3738

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/collection/impl/ReactiveOneToManyPersister.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@
4242
import org.hibernate.reactive.persister.collection.mutation.ReactiveUpdateRowsCoordinatorNoOp;
4343
import org.hibernate.reactive.persister.collection.mutation.ReactiveUpdateRowsCoordinatorOneToMany;
4444
import org.hibernate.reactive.util.impl.CompletionStages;
45-
import org.hibernate.sql.model.MutationType;
46-
import org.hibernate.sql.model.internal.MutationOperationGroupSingle;
4745
import org.hibernate.sql.model.jdbc.JdbcMutationOperation;
4846

4947
import static org.hibernate.reactive.util.impl.CompletionStages.loop;
5048
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
5149
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
50+
import static org.hibernate.sql.model.MutationType.UPDATE;
51+
import static org.hibernate.sql.model.internal.MutationOperationGroupFactory.singleOperation;
5252

5353
/**
5454
* A reactive {@link OneToManyPersister}
@@ -63,16 +63,18 @@ public class ReactiveOneToManyPersister extends OneToManyPersister
6363

6464
private CollectionLoader reusableCollectionLoader;
6565

66+
private final MutationExecutorService mutationExecutorService;
67+
6668
public ReactiveOneToManyPersister(
6769
Collection collectionBinding,
6870
CollectionDataAccess cacheAccessStrategy,
6971
RuntimeModelCreationContext creationContext) throws MappingException, CacheException {
7072
super( collectionBinding, cacheAccessStrategy, creationContext );
71-
7273
this.insertRowsCoordinator = buildInsertCoordinator();
7374
this.updateRowsCoordinator = buildUpdateCoordinator();
7475
this.deleteRowsCoordinator = buildDeleteCoordinator();
7576
this.removeCoordinator = buildDeleteAllCoordinator();
77+
this.mutationExecutorService = creationContext.getServiceRegistry().getService( MutationExecutorService.class );
7678
}
7779

7880
@Override
@@ -234,13 +236,10 @@ private CompletionStage<Void> writeIndex(
234236
private ReactiveMutationExecutor reactiveMutationExecutor(
235237
SharedSessionContractImplementor session,
236238
JdbcMutationOperation updateRowOperation) {
237-
final MutationExecutorService mutationExecutorService = getFactory()
238-
.getServiceRegistry()
239-
.getService( MutationExecutorService.class );
240239
return (ReactiveMutationExecutor) mutationExecutorService
241240
.createExecutor(
242241
this::getBasicBatchKey,
243-
new MutationOperationGroupSingle( MutationType.UPDATE, this, updateRowOperation ),
242+
singleOperation( UPDATE, this, updateRowOperation ),
244243
session
245244
);
246245
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/collection/mutation/ReactiveDeleteRowsCoordinatorStandard.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.hibernate.service.ServiceRegistry;
2323
import org.hibernate.sql.model.MutationOperationGroup;
2424
import org.hibernate.sql.model.MutationType;
25-
import org.hibernate.sql.model.internal.MutationOperationGroupSingle;
25+
import org.hibernate.sql.model.internal.MutationOperationGroupFactory;
2626
import org.hibernate.sql.model.jdbc.JdbcMutationOperation;
2727

2828
import static org.hibernate.reactive.util.impl.CompletionStages.loop;
@@ -32,7 +32,7 @@
3232
public class ReactiveDeleteRowsCoordinatorStandard extends DeleteRowsCoordinatorStandard implements ReactiveDeleteRowsCoordinator {
3333
private final RowMutationOperations rowMutationOperations;
3434
private final boolean deleteByIndex;
35-
private MutationOperationGroupSingle operationGroup;
35+
private MutationOperationGroup operationGroup;
3636
private final BasicBatchKey batchKey;
3737

3838
public ReactiveDeleteRowsCoordinatorStandard(
@@ -101,12 +101,12 @@ private ReactiveMutationExecutor reactiveMutationExecutor(SharedSessionContractI
101101
.createExecutor( this::getBatchKey, operationGroup, session );
102102
}
103103

104-
private MutationOperationGroupSingle createOperationGroup() {
104+
private MutationOperationGroup createOperationGroup() {
105105
assert getMutationTarget().getTargetPart() != null;
106106
assert getMutationTarget().getTargetPart().getKeyDescriptor() != null;
107107

108108
final JdbcMutationOperation operation = rowMutationOperations.getDeleteRowOperation();
109-
return new MutationOperationGroupSingle( MutationType.DELETE, getMutationTarget(), operation );
109+
return MutationOperationGroupFactory.singleOperation( MutationType.DELETE, getMutationTarget(), operation );
110110
}
111111

112112
private BasicBatchKey getBatchKey() {

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/collection/mutation/ReactiveInsertRowsCoordinatorStandard.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package org.hibernate.reactive.persister.collection.mutation;
77

8-
import java.lang.invoke.MethodHandles;
98
import java.util.Iterator;
109
import java.util.concurrent.CompletionStage;
1110

@@ -21,12 +20,13 @@
2120
import org.hibernate.persister.collection.mutation.RowMutationOperations;
2221
import org.hibernate.reactive.engine.jdbc.env.internal.ReactiveMutationExecutor;
2322
import org.hibernate.reactive.logging.impl.Log;
24-
import org.hibernate.reactive.logging.impl.LoggerFactory;
2523
import org.hibernate.sql.model.MutationOperationGroup;
2624
import org.hibernate.sql.model.MutationType;
27-
import org.hibernate.sql.model.internal.MutationOperationGroupSingle;
25+
import org.hibernate.sql.model.internal.MutationOperationGroupFactory;
2826
import org.hibernate.sql.model.jdbc.JdbcMutationOperation;
2927

28+
import static java.lang.invoke.MethodHandles.lookup;
29+
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
3030
import static org.hibernate.reactive.util.impl.CompletionStages.loop;
3131
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
3232
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
@@ -36,14 +36,14 @@
3636
*/
3737
public class ReactiveInsertRowsCoordinatorStandard implements ReactiveInsertRowsCoordinator {
3838

39-
private static final Log LOG = LoggerFactory.make( Log.class, MethodHandles.lookup() );
39+
private static final Log LOG = make( Log.class, lookup() );
4040

4141
private final CollectionMutationTarget mutationTarget;
4242
private final RowMutationOperations rowMutationOperations;
4343

4444
private final BasicBatchKey batchKey;
4545

46-
private MutationOperationGroupSingle operationGroup;
46+
private MutationOperationGroup operationGroup;
4747

4848
public ReactiveInsertRowsCoordinatorStandard(CollectionMutationTarget mutationTarget, RowMutationOperations rowMutationOperations) {
4949
this.mutationTarget = mutationTarget;
@@ -111,12 +111,12 @@ private BasicBatchKey getBatchKey() {
111111
return batchKey;
112112
}
113113

114-
private MutationOperationGroupSingle createOperationGroup() {
114+
private MutationOperationGroup createOperationGroup() {
115115
assert mutationTarget.getTargetPart() != null;
116116
assert mutationTarget.getTargetPart().getKeyDescriptor() != null;
117117

118118
final JdbcMutationOperation operation = rowMutationOperations.getInsertRowOperation();
119-
return new MutationOperationGroupSingle( MutationType.INSERT, mutationTarget, operation );
119+
return MutationOperationGroupFactory.singleOperation( MutationType.INSERT, mutationTarget, operation );
120120
}
121121

122122
private ReactiveMutationExecutor reactiveMutationExecutor(SharedSessionContractImplementor session, MutationOperationGroup operationGroup) {

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/collection/mutation/ReactiveRemoveCoordinatorStandard.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package org.hibernate.reactive.persister.collection.mutation;
77

8-
import java.lang.invoke.MethodHandles;
98
import java.util.concurrent.CompletionStage;
109

1110
import org.hibernate.engine.jdbc.batch.internal.BasicBatchKey;
@@ -18,26 +17,22 @@
1817
import org.hibernate.persister.collection.mutation.OperationProducer;
1918
import org.hibernate.persister.collection.mutation.RemoveCoordinatorStandard;
2019
import org.hibernate.reactive.engine.jdbc.env.internal.ReactiveMutationExecutor;
21-
import org.hibernate.reactive.logging.impl.Log;
22-
import org.hibernate.reactive.logging.impl.LoggerFactory;
2320
import org.hibernate.reactive.util.impl.CompletionStages;
2421
import org.hibernate.service.ServiceRegistry;
2522
import org.hibernate.sql.model.MutationOperationGroup;
26-
import org.hibernate.sql.model.MutationType;
2723
import org.hibernate.sql.model.ast.MutatingTableReference;
28-
import org.hibernate.sql.model.internal.MutationOperationGroupSingle;
2924

3025
import static org.hibernate.persister.collection.mutation.RowMutationOperations.DEFAULT_RESTRICTOR;
3126
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
3227
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
28+
import static org.hibernate.sql.model.MutationType.DELETE;
29+
import static org.hibernate.sql.model.internal.MutationOperationGroupFactory.singleOperation;
3330

3431
public class ReactiveRemoveCoordinatorStandard extends RemoveCoordinatorStandard implements ReactiveRemoveCoordinator {
3532

36-
private static final Log LOG = LoggerFactory.make( Log.class, MethodHandles.lookup() );
37-
3833
private final BasicBatchKey batchKey;
3934
private final OperationProducer operationProducer;
40-
private MutationOperationGroupSingle operationGroup;
35+
private MutationOperationGroup operationGroup;
4136

4237
public ReactiveRemoveCoordinatorStandard(
4338
CollectionMutationTarget mutationTarget,
@@ -92,7 +87,7 @@ private ReactiveMutationExecutor reactiveMutationExecutor(SharedSessionContractI
9287
}
9388

9489
// FIXME: Update ORM and inherit this
95-
protected MutationOperationGroupSingle buildOperationGroup() {
90+
private MutationOperationGroup buildOperationGroup() {
9691
assert getMutationTarget().getTargetPart() != null;
9792
assert getMutationTarget().getTargetPart().getKeyDescriptor() != null;
9893

@@ -103,10 +98,6 @@ protected MutationOperationGroupSingle buildOperationGroup() {
10398
final CollectionTableMapping tableMapping = getMutationTarget().getCollectionTableMapping();
10499
final MutatingTableReference tableReference = new MutatingTableReference( tableMapping );
105100

106-
return new MutationOperationGroupSingle(
107-
MutationType.DELETE,
108-
getMutationTarget(),
109-
operationProducer.createOperation( tableReference )
110-
);
101+
return singleOperation( DELETE, getMutationTarget(), operationProducer.createOperation( tableReference ) );
111102
}
112103
}

0 commit comments

Comments
 (0)