1111
1212import org .hibernate .engine .jdbc .mutation .JdbcValueBindings ;
1313import org .hibernate .engine .jdbc .mutation .MutationExecutor ;
14- import org .hibernate .engine .jdbc .mutation .ParameterUsage ;
1514import org .hibernate .engine .jdbc .mutation .group .PreparedStatementDetails ;
1615import org .hibernate .engine .jdbc .mutation .spi .MutationExecutorService ;
1716import org .hibernate .engine .spi .SessionFactoryImplementor ;
1817import org .hibernate .engine .spi .SharedSessionContractImplementor ;
19- import org .hibernate .metamodel .mapping .EntityRowIdMapping ;
2018import org .hibernate .persister .entity .AbstractEntityPersister ;
2119import org .hibernate .persister .entity .mutation .DeleteCoordinator ;
2220import org .hibernate .persister .entity .mutation .EntityTableMapping ;
2523import org .hibernate .reactive .engine .jdbc .env .internal .ReactiveMutationExecutor ;
2624import org .hibernate .reactive .logging .impl .Log ;
2725import org .hibernate .reactive .logging .impl .LoggerFactory ;
26+ import org .hibernate .sql .model .MutationOperation ;
2827import org .hibernate .sql .model .MutationOperationGroup ;
2928
3029import static org .hibernate .engine .jdbc .mutation .internal .ModelMutationHelper .identifiedResultsCheck ;
@@ -61,17 +60,18 @@ public CompletionStage<Void> coordinateReactiveDelete(Object entity, Object id,
6160 }
6261
6362 @ Override
64- protected void doDynamicDelete (Object entity , Object id , Object rowId , Object [] loadedState , SharedSessionContractImplementor session ) {
63+ protected void doDynamicDelete (Object entity , Object id , Object [] loadedState , SharedSessionContractImplementor session ) {
6564 stage = new CompletableFuture <>();
66- final MutationOperationGroup operationGroup = generateOperationGroup ( loadedState , true , session );
65+ final MutationOperationGroup operationGroup = generateOperationGroup ( null , loadedState , true , session );
6766 final ReactiveMutationExecutor mutationExecutor = mutationExecutor ( session , operationGroup );
6867
69- operationGroup .forEachOperation ( (position , mutation ) -> {
68+ for ( int i = 0 ; i < operationGroup .getNumberOfOperations (); i ++ ) {
69+ final MutationOperation mutation = operationGroup .getOperation ( i );
7070 if ( mutation != null ) {
7171 final String tableName = mutation .getTableDetails ().getTableName ();
7272 mutationExecutor .getPreparedStatementDetails ( tableName );
7373 }
74- } );
74+ }
7575
7676 applyLocking ( null , loadedState , mutationExecutor , session );
7777 applyId ( id , null , mutationExecutor , getStaticDeleteGroup (), session );
@@ -102,44 +102,49 @@ protected void applyId(
102102 MutationOperationGroup operationGroup ,
103103 SharedSessionContractImplementor session ) {
104104 final JdbcValueBindings jdbcValueBindings = mutationExecutor .getJdbcValueBindings ();
105- final EntityRowIdMapping rowIdMapping = entityPersister ().getRowIdMapping ();
106105
107- operationGroup .forEachOperation ( (position , jdbcMutation ) -> {
106+ for ( int position = 0 ; position < operationGroup .getNumberOfOperations (); position ++ ) {
107+ final MutationOperation jdbcMutation = operationGroup .getOperation ( position );
108108 final EntityTableMapping tableDetails = (EntityTableMapping ) jdbcMutation .getTableDetails ();
109- breakDownIdJdbcValues ( id , rowId , session , jdbcValueBindings , rowIdMapping , tableDetails );
109+ breakDownKeyJdbcValues ( id , rowId , session , jdbcValueBindings , tableDetails );
110110 final PreparedStatementDetails statementDetails = mutationExecutor .getPreparedStatementDetails ( tableDetails .getTableName () );
111111 if ( statementDetails != null ) {
112112 PreparedStatementAdaptor .bind ( statement -> {
113- PrepareStatementDetailsAdaptor detailsAdaptor = new PrepareStatementDetailsAdaptor ( statementDetails , statement , session .getJdbcServices () );
113+ PrepareStatementDetailsAdaptor detailsAdaptor = new PrepareStatementDetailsAdaptor (
114+ statementDetails ,
115+ statement ,
116+ session .getJdbcServices ()
117+ );
114118 // force creation of the PreparedStatement
115119 //noinspection resource
116120 detailsAdaptor .resolveStatement ();
117121 } );
118122 }
119- } );
123+ }
120124 }
121125
122126 @ Override
123- protected void doStaticDelete (Object entity , Object id , Object [] loadedState , Object version , SharedSessionContractImplementor session ) {
127+ protected void doStaticDelete (Object entity , Object id , Object rowId , Object [] loadedState , Object version , SharedSessionContractImplementor session ) {
124128 stage = new CompletableFuture <>();
125129 final boolean applyVersion = entity != null ;
126130 final MutationOperationGroup operationGroupToUse = entity == null
127131 ? resolveNoVersionDeleteGroup ( session )
128132 : getStaticDeleteGroup ();
129133
130134 final ReactiveMutationExecutor mutationExecutor = mutationExecutor ( session , operationGroupToUse );
131- getStaticDeleteGroup ().forEachOperation ( (position , mutation ) -> {
135+ for ( int position = 0 ; position < getStaticDeleteGroup ().getNumberOfOperations (); position ++ ) {
136+ final MutationOperation mutation = getStaticDeleteGroup ().getOperation ( position );
132137 if ( mutation != null ) {
133138 mutationExecutor .getPreparedStatementDetails ( mutation .getTableDetails ().getTableName () );
134139 }
135- } );
140+ }
136141
137142 if ( applyVersion ) {
138143 applyLocking ( version , null , mutationExecutor , session );
139144 }
140145 final JdbcValueBindings jdbcValueBindings = mutationExecutor .getJdbcValueBindings ();
141146 bindPartitionColumnValueBindings ( loadedState , session , jdbcValueBindings );
142- applyId ( id , null , mutationExecutor , getStaticDeleteGroup (), session );
147+ applyId ( id , rowId , mutationExecutor , getStaticDeleteGroup (), session );
143148 mutationExecutor .executeReactive (
144149 entity ,
145150 null ,
@@ -158,38 +163,6 @@ protected void doStaticDelete(Object entity, Object id, Object[] loadedState, Ob
158163 .whenComplete ( this ::complete );
159164 }
160165
161- /**
162- * Copy and paste of the on in ORM
163- */
164- private static void breakDownIdJdbcValues (
165- Object id ,
166- Object rowId ,
167- SharedSessionContractImplementor session ,
168- JdbcValueBindings jdbcValueBindings ,
169- EntityRowIdMapping rowIdMapping ,
170- EntityTableMapping tableDetails ) {
171- if ( rowId != null && rowIdMapping != null && tableDetails .isIdentifierTable () ) {
172- jdbcValueBindings .bindValue (
173- rowId ,
174- tableDetails .getTableName (),
175- rowIdMapping .getRowIdName (),
176- ParameterUsage .RESTRICT
177- );
178- }
179- else {
180- tableDetails .getKeyMapping ().breakDownKeyJdbcValues (
181- id ,
182- (jdbcValue , columnMapping ) -> jdbcValueBindings .bindValue (
183- jdbcValue ,
184- tableDetails .getTableName (),
185- columnMapping .getColumnName (),
186- ParameterUsage .RESTRICT
187- ),
188- session
189- );
190- }
191- }
192-
193166 private void complete (Object o , Throwable throwable ) {
194167 if ( throwable != null ) {
195168 stage .toCompletableFuture ().completeExceptionally ( throwable );
0 commit comments