diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 9267e27dc..9121cd8d8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -265,6 +265,11 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App MongoPersistentProperty property = association.getInverse(); Object value = dbo.get(property.getName()); + + if (value == null) { + return; + } + DBRef dbref = value instanceof DBRef ? (DBRef) value : null; Object obj = dbRefResolver.resolveDbRef(property, dbref, new DbRefResolverCallback() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java index 04c4a66ea..0bb6a1fe7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java @@ -429,6 +429,27 @@ public class DbRefMappingMongoConverterUnitTests { assertProxyIsResolved(result.dbRefEqualsAndHashcodeObjectMethodOverride2, true); } + /** + * @see DATAMONGO-987 + */ + @Test + public void shouldNotGenerateLazyLoadingProxyForNullValues() { + + DBObject dbo = new BasicDBObject(); + ClassWithLazyDbRefs lazyDbRefs = new ClassWithLazyDbRefs(); + lazyDbRefs.id = "42"; + converter.write(lazyDbRefs, dbo); + + ClassWithLazyDbRefs result = converter.read(ClassWithLazyDbRefs.class, dbo); + + assertThat(result.id, is(lazyDbRefs.id)); + assertThat(result.dbRefToInterface, is(nullValue())); + assertThat(result.dbRefToConcreteCollection, is(nullValue())); + assertThat(result.dbRefToConcreteType, is(nullValue())); + assertThat(result.dbRefToConcreteTypeWithPersistenceConstructor, is(nullValue())); + assertThat(result.dbRefToConcreteTypeWithPersistenceConstructorWithoutDefaultConstructor, is(nullValue())); + } + private Object transport(Object result) { return SerializationUtils.deserialize(SerializationUtils.serialize(result)); }