diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/BulkOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/BulkOperations.java
index a6ff04575..9e7dd2d2a 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/BulkOperations.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/BulkOperations.java
@@ -29,6 +29,15 @@ import com.mongodb.bulk.BulkWriteResult;
* make use of low level bulk commands on the protocol level. This interface defines a fluent API to add multiple single
* operations or list of similar operations in sequence which can then eventually be executed by calling
* {@link #execute()}.
+ *
+ *
+ * MongoTemplate template = …;
+ *
+ * template.bulkOps(BulkMode.UNORDERED, Person.class)
+ * .insert(newPerson)
+ * .updateOne(where("firstname").is("Joe"), Update.update("lastname", "Doe"))
+ * .execute();
+ *
*
* Bulk operations are issued as one batch that pulls together all insert, update, and delete operations. Operations
* that require individual operation results such as optimistic locking (using {@code @Version}) are not supported and
@@ -96,7 +105,7 @@ public interface BulkOperations {
* @param updates Update operations to perform.
* @return the current {@link BulkOperations} instance with the update added, will never be {@literal null}.
*/
- BulkOperations updateOne(List> updates);
+ BulkOperations updateOne(List> updates);
/**
* Add a single update to the bulk operation. For the update request, all matching documents are updated.
@@ -125,7 +134,7 @@ public interface BulkOperations {
* @param updates Update operations to perform.
* @return the current {@link BulkOperations} instance with the update added, will never be {@literal null}.
*/
- BulkOperations updateMulti(List> updates);
+ BulkOperations updateMulti(List> updates);
/**
* Add a single upsert to the bulk operation. An upsert is an update if the set of matching documents is not empty,
@@ -180,7 +189,7 @@ public interface BulkOperations {
*
* @param query Update criteria.
* @param replacement the replacement document. Must not be {@literal null}.
- * @return the current {@link BulkOperations} instance with the replace added, will never be {@literal null}.
+ * @return the current {@link BulkOperations} instance with the replacement added, will never be {@literal null}.
* @since 2.2
*/
default BulkOperations replaceOne(Query query, Object replacement) {
@@ -193,7 +202,7 @@ public interface BulkOperations {
* @param query Update criteria.
* @param replacement the replacement document. Must not be {@literal null}.
* @param options the {@link FindAndModifyOptions} holding additional information. Must not be {@literal null}.
- * @return the current {@link BulkOperations} instance with the replace added, will never be {@literal null}.
+ * @return the current {@link BulkOperations} instance with the replacement added, will never be {@literal null}.
* @since 2.2
*/
BulkOperations replaceOne(Query query, Object replacement, FindAndReplaceOptions options);
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java
index e00515251..bca9d1588 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultBulkOperations.java
@@ -22,9 +22,11 @@ import java.util.stream.Collectors;
import org.bson.Document;
import org.bson.conversions.Bson;
+import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.mapping.PersistentEntity;
+import org.springframework.data.mapping.callback.EntityCallback;
import org.springframework.data.mapping.callback.EntityCallbacks;
import org.springframework.data.mongodb.BulkOperationException;
import org.springframework.data.mongodb.core.aggregation.AggregationOperationContext;
@@ -48,7 +50,6 @@ import org.springframework.data.mongodb.core.query.UpdateDefinition.ArrayFilter;
import org.springframework.data.util.Pair;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
-import org.springframework.util.ObjectUtils;
import com.mongodb.MongoBulkWriteException;
import com.mongodb.WriteConcern;
@@ -78,7 +79,6 @@ class DefaultBulkOperations implements BulkOperations {
private final List models = new ArrayList<>();
private @Nullable WriteConcern defaultWriteConcern;
-
private BulkWriteOptions bulkOptions;
/**
@@ -100,7 +100,7 @@ class DefaultBulkOperations implements BulkOperations {
this.mongoOperations = mongoOperations;
this.collectionName = collectionName;
this.bulkOperationContext = bulkOperationContext;
- this.bulkOptions = getBulkWriteOptions(bulkOperationContext.getBulkMode());
+ this.bulkOptions = getBulkWriteOptions(bulkOperationContext.bulkMode());
}
/**
@@ -145,11 +145,11 @@ class DefaultBulkOperations implements BulkOperations {
}
@Override
- public BulkOperations updateOne(List> updates) {
+ public BulkOperations updateOne(List> updates) {
Assert.notNull(updates, "Updates must not be null");
- for (Pair update : updates) {
+ for (Pair update : updates) {
update(update.getFirst(), update.getSecond(), false, false);
}
@@ -169,11 +169,11 @@ class DefaultBulkOperations implements BulkOperations {
}
@Override
- public BulkOperations updateMulti(List> updates) {
+ public BulkOperations updateMulti(List> updates) {
Assert.notNull(updates, "Updates must not be null");
- for (Pair update : updates) {
+ for (Pair update : updates) {
update(update.getFirst(), update.getSecond(), false, true);
}
@@ -253,7 +253,7 @@ class DefaultBulkOperations implements BulkOperations {
return result;
} finally {
- this.bulkOptions = getBulkWriteOptions(bulkOperationContext.getBulkMode());
+ this.bulkOptions = getBulkWriteOptions(bulkOperationContext.bulkMode());
}
}
@@ -272,9 +272,8 @@ class DefaultBulkOperations implements BulkOperations {
bulkOptions);
} catch (RuntimeException ex) {
- if (ex instanceof MongoBulkWriteException) {
+ if (ex instanceof MongoBulkWriteException mongoBulkWriteException) {
- MongoBulkWriteException mongoBulkWriteException = (MongoBulkWriteException) ex;
if (mongoBulkWriteException.getWriteConcernError() != null) {
throw new DataIntegrityViolationException(ex.getMessage(), ex);
}
@@ -289,17 +288,17 @@ class DefaultBulkOperations implements BulkOperations {
maybeEmitBeforeSaveEvent(it);
- if (it.getModel() instanceof InsertOneModel) {
+ if (it.model() instanceof InsertOneModel) {
- Document target = ((InsertOneModel) it.getModel()).getDocument();
- maybeInvokeBeforeSaveCallback(it.getSource(), target);
- } else if (it.getModel() instanceof ReplaceOneModel) {
+ Document target = ((InsertOneModel) it.model()).getDocument();
+ maybeInvokeBeforeSaveCallback(it.source(), target);
+ } else if (it.model() instanceof ReplaceOneModel) {
- Document target = ((ReplaceOneModel) it.getModel()).getReplacement();
- maybeInvokeBeforeSaveCallback(it.getSource(), target);
+ Document target = ((ReplaceOneModel) it.model()).getReplacement();
+ maybeInvokeBeforeSaveCallback(it.source(), target);
}
- return mapWriteModel(it.getSource(), it.getModel());
+ return mapWriteModel(it.source(), it.model());
}
/**
@@ -329,9 +328,8 @@ class DefaultBulkOperations implements BulkOperations {
private WriteModel mapWriteModel(Object source, WriteModel writeModel) {
- if (writeModel instanceof UpdateOneModel) {
+ if (writeModel instanceof UpdateOneModel model) {
- UpdateOneModel model = (UpdateOneModel) writeModel;
if (source instanceof AggregationUpdate aggregationUpdate) {
List pipeline = mapUpdatePipeline(aggregationUpdate);
@@ -342,9 +340,8 @@ class DefaultBulkOperations implements BulkOperations {
model.getOptions());
}
- if (writeModel instanceof UpdateManyModel) {
+ if (writeModel instanceof UpdateManyModel model) {
- UpdateManyModel model = (UpdateManyModel) writeModel;
if (source instanceof AggregationUpdate aggregationUpdate) {
List pipeline = mapUpdatePipeline(aggregationUpdate);
@@ -355,17 +352,11 @@ class DefaultBulkOperations implements BulkOperations {
model.getOptions());
}
- if (writeModel instanceof DeleteOneModel) {
-
- DeleteOneModel model = (DeleteOneModel) writeModel;
-
+ if (writeModel instanceof DeleteOneModel model) {
return new DeleteOneModel<>(getMappedQuery(model.getFilter()), model.getOptions());
}
- if (writeModel instanceof DeleteManyModel) {
-
- DeleteManyModel model = (DeleteManyModel) writeModel;
-
+ if (writeModel instanceof DeleteManyModel model) {
return new DeleteManyModel<>(getMappedQuery(model.getFilter()), model.getOptions());
}
@@ -373,24 +364,23 @@ class DefaultBulkOperations implements BulkOperations {
}
private List mapUpdatePipeline(AggregationUpdate source) {
- Class> type = bulkOperationContext.getEntity().isPresent()
- ? bulkOperationContext.getEntity().map(PersistentEntity::getType).get()
+
+ Class> type = bulkOperationContext.entity().isPresent()
+ ? bulkOperationContext.entity().map(PersistentEntity::getType).get()
: Object.class;
AggregationOperationContext context = new RelaxedTypeBasedAggregationOperationContext(type,
- bulkOperationContext.getUpdateMapper().getMappingContext(), bulkOperationContext.getQueryMapper());
+ bulkOperationContext.updateMapper().getMappingContext(), bulkOperationContext.queryMapper());
- List pipeline = new AggregationUtil(bulkOperationContext.getQueryMapper(),
- bulkOperationContext.getQueryMapper().getMappingContext()).createPipeline(source,
- context);
- return pipeline;
+ return new AggregationUtil(bulkOperationContext.queryMapper(),
+ bulkOperationContext.queryMapper().getMappingContext()).createPipeline(source, context);
}
private Bson getMappedUpdate(Bson update) {
- return bulkOperationContext.getUpdateMapper().getMappedObject(update, bulkOperationContext.getEntity());
+ return bulkOperationContext.updateMapper().getMappedObject(update, bulkOperationContext.entity());
}
private Bson getMappedQuery(Bson query) {
- return bulkOperationContext.getQueryMapper().getMappedObject(query, bulkOperationContext.getEntity());
+ return bulkOperationContext.queryMapper().getMappedObject(query, bulkOperationContext.entity());
}
private Document getMappedObject(Object source) {
@@ -411,80 +401,57 @@ class DefaultBulkOperations implements BulkOperations {
private void maybeEmitBeforeSaveEvent(SourceAwareWriteModelHolder holder) {
- if (holder.getModel() instanceof InsertOneModel) {
+ if (holder.model() instanceof InsertOneModel) {
- Document target = ((InsertOneModel) holder.getModel()).getDocument();
- maybeEmitEvent(new BeforeSaveEvent<>(holder.getSource(), target, collectionName));
- } else if (holder.getModel() instanceof ReplaceOneModel) {
+ Document target = ((InsertOneModel) holder.model()).getDocument();
+ maybeEmitEvent(new BeforeSaveEvent<>(holder.source(), target, collectionName));
+ } else if (holder.model() instanceof ReplaceOneModel) {
- Document target = ((ReplaceOneModel) holder.getModel()).getReplacement();
- maybeEmitEvent(new BeforeSaveEvent<>(holder.getSource(), target, collectionName));
+ Document target = ((ReplaceOneModel) holder.model()).getReplacement();
+ maybeEmitEvent(new BeforeSaveEvent<>(holder.source(), target, collectionName));
}
}
private void maybeEmitAfterSaveEvent(SourceAwareWriteModelHolder holder) {
- if (holder.getModel() instanceof InsertOneModel) {
+ if (holder.model() instanceof InsertOneModel) {
- Document target = ((InsertOneModel) holder.getModel()).getDocument();
- maybeEmitEvent(new AfterSaveEvent<>(holder.getSource(), target, collectionName));
- } else if (holder.getModel() instanceof ReplaceOneModel) {
+ Document target = ((InsertOneModel) holder.model()).getDocument();
+ maybeEmitEvent(new AfterSaveEvent<>(holder.source(), target, collectionName));
+ } else if (holder.model() instanceof ReplaceOneModel) {
- Document target = ((ReplaceOneModel) holder.getModel()).getReplacement();
- maybeEmitEvent(new AfterSaveEvent<>(holder.getSource(), target, collectionName));
+ Document target = ((ReplaceOneModel) holder.model()).getReplacement();
+ maybeEmitEvent(new AfterSaveEvent<>(holder.source(), target, collectionName));
}
}
private void maybeInvokeAfterSaveCallback(SourceAwareWriteModelHolder holder) {
- if (holder.getModel() instanceof InsertOneModel) {
+ if (holder.model() instanceof InsertOneModel) {
- Document target = ((InsertOneModel) holder.getModel()).getDocument();
- maybeInvokeAfterSaveCallback(holder.getSource(), target);
- } else if (holder.getModel() instanceof ReplaceOneModel) {
+ Document target = ((InsertOneModel) holder.model()).getDocument();
+ maybeInvokeAfterSaveCallback(holder.source(), target);
+ } else if (holder.model() instanceof ReplaceOneModel) {
- Document target = ((ReplaceOneModel) holder.getModel()).getReplacement();
- maybeInvokeAfterSaveCallback(holder.getSource(), target);
+ Document target = ((ReplaceOneModel) holder.model()).getReplacement();
+ maybeInvokeAfterSaveCallback(holder.source(), target);
}
}
- private , T> E maybeEmitEvent(E event) {
-
- if (bulkOperationContext.getEventPublisher() == null) {
- return event;
- }
-
- bulkOperationContext.getEventPublisher().publishEvent(event);
- return event;
+ private void maybeEmitEvent(MongoMappingEvent> event) {
+ bulkOperationContext.publishEvent(event);
}
private Object maybeInvokeBeforeConvertCallback(Object value) {
-
- if (bulkOperationContext.getEntityCallbacks() == null) {
- return value;
- }
-
- return bulkOperationContext.getEntityCallbacks().callback(BeforeConvertCallback.class, value, collectionName);
+ return bulkOperationContext.callback(BeforeConvertCallback.class, value, collectionName);
}
private Object maybeInvokeBeforeSaveCallback(Object value, Document mappedDocument) {
-
- if (bulkOperationContext.getEntityCallbacks() == null) {
- return value;
- }
-
- return bulkOperationContext.getEntityCallbacks().callback(BeforeSaveCallback.class, value, mappedDocument,
- collectionName);
+ return bulkOperationContext.callback(BeforeSaveCallback.class, value, mappedDocument, collectionName);
}
private Object maybeInvokeAfterSaveCallback(Object value, Document mappedDocument) {
-
- if (bulkOperationContext.getEntityCallbacks() == null) {
- return value;
- }
-
- return bulkOperationContext.getEntityCallbacks().callback(AfterSaveCallback.class, value, mappedDocument,
- collectionName);
+ return bulkOperationContext.callback(AfterSaveCallback.class, value, mappedDocument, collectionName);
}
private static BulkWriteOptions getBulkWriteOptions(BulkMode bulkMode) {
@@ -525,152 +492,62 @@ class DefaultBulkOperations implements BulkOperations {
}
/**
- * {@link BulkOperationContext} holds information about
- * {@link org.springframework.data.mongodb.core.BulkOperations.BulkMode} the entity in use as well as references to
+ * {@link BulkOperationContext} holds information about {@link BulkMode} the entity in use as well as references to
* {@link QueryMapper} and {@link UpdateMapper}.
*
* @author Christoph Strobl
* @since 2.0
*/
- static final class BulkOperationContext {
-
- private final BulkMode bulkMode;
- private final Optional extends MongoPersistentEntity>> entity;
- private final QueryMapper queryMapper;
- private final UpdateMapper updateMapper;
- private final ApplicationEventPublisher eventPublisher;
- private final EntityCallbacks entityCallbacks;
-
- BulkOperationContext(BulkOperations.BulkMode bulkMode, Optional extends MongoPersistentEntity>> entity,
- QueryMapper queryMapper, UpdateMapper updateMapper, ApplicationEventPublisher eventPublisher,
- EntityCallbacks entityCallbacks) {
-
- this.bulkMode = bulkMode;
- this.entity = entity;
- this.queryMapper = queryMapper;
- this.updateMapper = updateMapper;
- this.eventPublisher = eventPublisher;
- this.entityCallbacks = entityCallbacks;
- }
+ record BulkOperationContext(BulkMode bulkMode, Optional extends MongoPersistentEntity>> entity,
+ QueryMapper queryMapper, UpdateMapper updateMapper, @Nullable ApplicationEventPublisher eventPublisher,
+ @Nullable EntityCallbacks entityCallbacks) {
- public BulkMode getBulkMode() {
- return this.bulkMode;
+ public boolean skipEventPublishing() {
+ return eventPublisher == null;
}
- public Optional extends MongoPersistentEntity>> getEntity() {
- return this.entity;
+ public boolean skipEntityCallbacks() {
+ return entityCallbacks == null;
}
- public QueryMapper getQueryMapper() {
- return this.queryMapper;
- }
-
- public UpdateMapper getUpdateMapper() {
- return this.updateMapper;
- }
+ @SuppressWarnings("rawtypes")
+ public T callback(Class extends EntityCallback> callbackType, T entity, String collectionName) {
- public ApplicationEventPublisher getEventPublisher() {
- return this.eventPublisher;
- }
+ if (skipEntityCallbacks()) {
+ return entity;
+ }
- public EntityCallbacks getEntityCallbacks() {
- return this.entityCallbacks;
+ return entityCallbacks.callback(callbackType, entity, collectionName);
}
- @Override
- public boolean equals(@Nullable Object o) {
- if (this == o)
- return true;
- if (o == null || getClass() != o.getClass())
- return false;
-
- BulkOperationContext that = (BulkOperationContext) o;
+ @SuppressWarnings("rawtypes")
+ public T callback(Class extends EntityCallback> callbackType, T entity, Document document,
+ String collectionName) {
- if (bulkMode != that.bulkMode)
- return false;
- if (!ObjectUtils.nullSafeEquals(this.entity, that.entity)) {
- return false;
+ if (skipEntityCallbacks()) {
+ return entity;
}
- if (!ObjectUtils.nullSafeEquals(this.queryMapper, that.queryMapper)) {
- return false;
- }
- if (!ObjectUtils.nullSafeEquals(this.updateMapper, that.updateMapper)) {
- return false;
- }
- if (!ObjectUtils.nullSafeEquals(this.eventPublisher, that.eventPublisher)) {
- return false;
- }
- return ObjectUtils.nullSafeEquals(this.entityCallbacks, that.entityCallbacks);
- }
- @Override
- public int hashCode() {
- int result = bulkMode != null ? bulkMode.hashCode() : 0;
- result = 31 * result + ObjectUtils.nullSafeHashCode(entity);
- result = 31 * result + ObjectUtils.nullSafeHashCode(queryMapper);
- result = 31 * result + ObjectUtils.nullSafeHashCode(updateMapper);
- result = 31 * result + ObjectUtils.nullSafeHashCode(eventPublisher);
- result = 31 * result + ObjectUtils.nullSafeHashCode(entityCallbacks);
- return result;
+ return entityCallbacks.callback(callbackType, entity, document, collectionName);
}
- public String toString() {
- return "DefaultBulkOperations.BulkOperationContext(bulkMode=" + this.getBulkMode() + ", entity="
- + this.getEntity() + ", queryMapper=" + this.getQueryMapper() + ", updateMapper=" + this.getUpdateMapper()
- + ", eventPublisher=" + this.getEventPublisher() + ", entityCallbacks=" + this.getEntityCallbacks() + ")";
+ public void publishEvent(ApplicationEvent event) {
+
+ if (skipEventPublishing()) {
+ return;
+ }
+
+ eventPublisher.publishEvent(event);
}
}
/**
* Value object chaining together an actual source with its {@link WriteModel} representation.
*
- * @since 2.2
* @author Christoph Strobl
+ * @since 2.2
*/
- private static final class SourceAwareWriteModelHolder {
-
- private final Object source;
- private final WriteModel model;
-
- SourceAwareWriteModelHolder(Object source, WriteModel model) {
-
- this.source = source;
- this.model = model;
- }
+ record SourceAwareWriteModelHolder(Object source, WriteModel model) {
- public Object getSource() {
- return this.source;
- }
-
- public WriteModel getModel() {
- return this.model;
- }
-
- @Override
- public boolean equals(@Nullable Object o) {
- if (this == o)
- return true;
- if (o == null || getClass() != o.getClass())
- return false;
-
- SourceAwareWriteModelHolder that = (SourceAwareWriteModelHolder) o;
-
- if (!ObjectUtils.nullSafeEquals(this.source, that.source)) {
- return false;
- }
- return ObjectUtils.nullSafeEquals(this.model, that.model);
- }
-
- @Override
- public int hashCode() {
- int result = ObjectUtils.nullSafeHashCode(model);
- result = 31 * result + ObjectUtils.nullSafeHashCode(source);
- return result;
- }
-
- public String toString() {
- return "DefaultBulkOperations.SourceAwareWriteModelHolder(source=" + this.getSource() + ", model="
- + this.getModel() + ")";
- }
}
}
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
index a740fcc53..ab201c1a9 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
@@ -74,7 +74,16 @@ import org.springframework.data.mongodb.core.aggregation.AggregationOptions.Buil
import org.springframework.data.mongodb.core.aggregation.AggregationPipeline;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
-import org.springframework.data.mongodb.core.convert.*;
+import org.springframework.data.mongodb.core.convert.DbRefResolver;
+import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
+import org.springframework.data.mongodb.core.convert.JsonSchemaMapper;
+import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
+import org.springframework.data.mongodb.core.convert.MongoConverter;
+import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
+import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper;
+import org.springframework.data.mongodb.core.convert.MongoWriter;
+import org.springframework.data.mongodb.core.convert.QueryMapper;
+import org.springframework.data.mongodb.core.convert.UpdateMapper;
import org.springframework.data.mongodb.core.index.IndexOperations;
import org.springframework.data.mongodb.core.index.IndexOperationsProvider;
import org.springframework.data.mongodb.core.index.MongoMappingEventPublisher;
@@ -110,7 +119,16 @@ import com.mongodb.ClientSessionOptions;
import com.mongodb.MongoException;
import com.mongodb.ReadPreference;
import com.mongodb.WriteConcern;
-import com.mongodb.client.*;
+import com.mongodb.client.AggregateIterable;
+import com.mongodb.client.ClientSession;
+import com.mongodb.client.DistinctIterable;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MapReduceIterable;
+import com.mongodb.client.MongoClient;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
+import com.mongodb.client.MongoIterable;
import com.mongodb.client.model.*;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
@@ -750,8 +768,8 @@ public class MongoTemplate
}
@Override
- public BulkOperations bulkOps(BulkMode bulkMode, String collectionName) {
- return bulkOps(bulkMode, null, collectionName);
+ public BulkOperations bulkOps(BulkMode mode, String collectionName) {
+ return bulkOps(mode, null, collectionName);
}
@Override
@@ -871,7 +889,7 @@ public class MongoTemplate
Assert.notNull(targetClass, "Target type must not be null");
EntityProjection projection = operations.introspectProjection(targetClass, sourceClass);
- ProjectingReadCallback,T> callback = new ProjectingReadCallback<>(mongoConverter, projection, collectionName);
+ ProjectingReadCallback, T> callback = new ProjectingReadCallback<>(mongoConverter, projection, collectionName);
int limit = query.isLimited() ? query.getLimit() + 1 : Integer.MAX_VALUE;
if (query.hasKeyset()) {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsIntegrationTests.java
index fbf732911..e0a5d3ac9 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsIntegrationTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultBulkOperationsIntegrationTests.java
@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
-import com.mongodb.bulk.BulkWriteResult;
import org.bson.Document;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -49,6 +48,7 @@ import org.springframework.data.util.Pair;
import com.mongodb.MongoBulkWriteException;
import com.mongodb.WriteConcern;
+import com.mongodb.bulk.BulkWriteResult;
import com.mongodb.client.MongoCollection;
/**
@@ -295,7 +295,7 @@ public class DefaultBulkOperationsIntegrationTests {
public void mixedBulkOrderedWithList() {
List inserts = Arrays.asList(newDoc("1", "v1"), newDoc("2", "v2"), newDoc("3", "v2"));
- List> updates = Arrays.asList(Pair.of(where("value", "v2"), set("value", "v3")));
+ List> updates = Arrays.asList(Pair.of(where("value", "v2"), set("value", "v3")));
List removes = Arrays.asList(where("_id", "1"));
com.mongodb.bulk.BulkWriteResult result = createBulkOps(BulkMode.ORDERED, BaseDoc.class).insert(inserts)
@@ -329,7 +329,7 @@ public class DefaultBulkOperationsIntegrationTests {
insertSomeDocuments();
- List> updates = new ArrayList>();
+ List> updates = new ArrayList<>();
updates.add(Pair.of(where("value", "value1"), set("value", "value3")));
updates.add(Pair.of(where("value", "value2"), set("value", "value4")));