DATAMONGO-987 - Avoid creation of lazy-loading proxies for null-values.
We now avoid creating a lazy-loading proxy if we detect that the property-value in the backing DbObject for a @Lazy(true) annotated field is null. Original pull request: #207.
This commit is contained in:
committed by
Oliver Gierke
parent
d7e6f2ee41
commit
a1ecd4a501
@@ -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() {
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user