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 40f3bf77c..440301857 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 @@ -25,6 +25,7 @@ import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.util.Pair; import org.springframework.util.Assert; +import com.mongodb.BasicDBObject; import com.mongodb.BulkWriteException; import com.mongodb.BulkWriteOperation; import com.mongodb.BulkWriteRequestBuilder; @@ -38,6 +39,7 @@ import com.mongodb.WriteConcern; * * @author Tobias Trelle * @author Oliver Gierke + * @author Christoph Strobl * @since 1.9 */ class DefaultBulkOperations implements BulkOperations { @@ -117,7 +119,15 @@ class DefaultBulkOperations implements BulkOperations { Assert.notNull(document, "Document must not be null!"); - bulk.insert((DBObject) mongoOperations.getConverter().convertToMongoType(document)); + if (document instanceof DBObject) { + + bulk.insert((DBObject) document); + return this; + } + + DBObject sink = new BasicDBObject(); + mongoOperations.getConverter().write(document, sink); + bulk.insert(sink); return this; } 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 0f3f0b204..26c09f53f 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 @@ -46,6 +46,7 @@ import com.mongodb.WriteConcern; * * @author Tobias Trelle * @author Oliver Gierke + * @author Christoph Strobl */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:infrastructure.xml") @@ -270,6 +271,25 @@ public class DefaultBulkOperationsIntegrationTests { assertThat(result.getRemovedCount(), is(1)); } + /** + * @see DATAMONGO-1534 + */ + @Test + public void insertShouldConsiderInheritance() { + + SpecialDoc specialDoc = new SpecialDoc(); + specialDoc.id = "id-special"; + specialDoc.value = "normal-value"; + specialDoc.specialValue = "special-value"; + + createBulkOps(BulkMode.ORDERED).insert(Arrays.asList(specialDoc)).execute(); + + BaseDoc doc = operations.findOne(where("_id", specialDoc.id), BaseDoc.class, COLLECTION_NAME); + + assertThat(doc, notNullValue()); + assertThat(doc, instanceOf(SpecialDoc.class)); + } + private void testUpdate(BulkMode mode, boolean multi, int expectedUpdates) { BulkOperations bulkOps = createBulkOps(mode);