16
16
package org .springframework .data .jdbc .core ;
17
17
18
18
import java .util .ArrayList ;
19
- import java .util .Collection ;
20
19
import java .util .Collections ;
21
20
import java .util .HashMap ;
22
21
import java .util .Iterator ;
23
22
import java .util .LinkedHashMap ;
24
23
import java .util .List ;
25
24
import java .util .Map ;
26
25
import java .util .Optional ;
27
- import java .util .function .Consumer ;
28
26
import java .util .function .Function ;
29
27
import java .util .stream .Collectors ;
30
28
import java .util .stream .StreamSupport ;
58
56
import org .springframework .lang .Nullable ;
59
57
import org .springframework .util .Assert ;
60
58
import org .springframework .util .ClassUtils ;
61
- import org .springframework .util .ObjectUtils ;
62
59
63
60
/**
64
61
* {@link JdbcAggregateOperations} implementation, storing aggregates in and obtaining them from a JDBC data store.
@@ -176,8 +173,19 @@ public <T> T save(T instance) {
176
173
177
174
@ Override
178
175
public <T > List <T > saveAll (Iterable <T > instances ) {
179
- return doWithBatch (instances , entity -> changeCreatorSelectorForSave (entity ).apply (entity ), this ::verifyIdProperty ,
180
- this ::performSaveAll );
176
+
177
+ Assert .notNull (instances , "Aggregate instances must not be null" );
178
+
179
+ if (!instances .iterator ().hasNext ()) {
180
+ return Collections .emptyList ();
181
+ }
182
+
183
+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
184
+ for (T instance : instances ) {
185
+ verifyIdProperty (instance );
186
+ entityAndChangeCreators .add (new EntityAndChangeCreator <>(instance , changeCreatorSelectorForSave (instance )));
187
+ }
188
+ return performSaveAll (entityAndChangeCreators );
181
189
}
182
190
183
191
/**
@@ -198,7 +206,21 @@ public <T> T insert(T instance) {
198
206
199
207
@ Override
200
208
public <T > List <T > insertAll (Iterable <T > instances ) {
201
- return doWithBatch (instances , entity -> createInsertChange (prepareVersionForInsert (entity )), this ::performSaveAll );
209
+
210
+ Assert .notNull (instances , "Aggregate instances must not be null" );
211
+
212
+ if (!instances .iterator ().hasNext ()) {
213
+ return Collections .emptyList ();
214
+ }
215
+
216
+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
217
+ for (T instance : instances ) {
218
+
219
+ Function <T , RootAggregateChange <T >> changeCreator = entity -> createInsertChange (prepareVersionForInsert (entity ));
220
+ EntityAndChangeCreator <T > entityChange = new EntityAndChangeCreator <>(instance , changeCreator );
221
+ entityAndChangeCreators .add (entityChange );
222
+ }
223
+ return performSaveAll (entityAndChangeCreators );
202
224
}
203
225
204
226
/**
@@ -219,35 +241,21 @@ public <T> T update(T instance) {
219
241
220
242
@ Override
221
243
public <T > List <T > updateAll (Iterable <T > instances ) {
222
- return doWithBatch (instances , entity -> createUpdateChange (prepareVersionForUpdate (entity )), this ::performSaveAll );
223
- }
224
-
225
- private <T > List <T > doWithBatch (Iterable <T > iterable , Function <T , RootAggregateChange <T >> changeCreator ,
226
- Function <List <EntityAndChangeCreator <T >>, List <T >> performFunction ) {
227
- return doWithBatch (iterable , changeCreator , entity -> {}, performFunction );
228
- }
229
-
230
- private <T > List <T > doWithBatch (Iterable <T > iterable , Function <T , RootAggregateChange <T >> changeCreator ,
231
- Consumer <T > beforeEntityChange , Function <List <EntityAndChangeCreator <T >>, List <T >> performFunction ) {
232
244
233
- Assert .notNull (iterable , "Aggregate instances must not be null" );
245
+ Assert .notNull (instances , "Aggregate instances must not be null" );
234
246
235
- if (ObjectUtils . isEmpty ( iterable )) {
247
+ if (! instances . iterator (). hasNext ( )) {
236
248
return Collections .emptyList ();
237
249
}
238
250
239
- List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>(
240
- iterable instanceof Collection <?> c ? c .size () : 16 );
241
-
242
- for (T instance : iterable ) {
243
-
244
- beforeEntityChange .accept (instance );
251
+ List <EntityAndChangeCreator <T >> entityAndChangeCreators = new ArrayList <>();
252
+ for (T instance : instances ) {
245
253
254
+ Function <T , RootAggregateChange <T >> changeCreator = entity -> createUpdateChange (prepareVersionForUpdate (entity ));
246
255
EntityAndChangeCreator <T > entityChange = new EntityAndChangeCreator <>(instance , changeCreator );
247
256
entityAndChangeCreators .add (entityChange );
248
257
}
249
-
250
- return performFunction .apply (entityAndChangeCreators );
258
+ return performSaveAll (entityAndChangeCreators );
251
259
}
252
260
253
261
@ Override
0 commit comments