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 87d9efa50..f03f2886c 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 @@ -268,8 +268,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App entity.doWithAssociations(new AssociationHandler() { public void doWithAssociation(Association association) { - MongoPersistentProperty property = association.getInverse(); - Object value = dbo.get(property.getName()); + final MongoPersistentProperty property = association.getInverse(); + Object value = dbo.get(property.getFieldName()); if (value == null) { return; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index f937da253..a6076cb2f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -2791,6 +2791,7 @@ public class MongoTemplateTests { @Id public String id; + @Field("db_ref_list")/** @see DATAMONGO-1058 */ @org.springframework.data.mongodb.core.mapping.DBRef// public List dbRefAnnotatedList; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index dff4ce39b..3b9f0c0c0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -15,10 +15,26 @@ */ package org.springframework.data.mongodb.core.convert; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import static org.springframework.data.mongodb.core.DBObjectTestUtils.*; +import static org.hamcrest.Matchers.arrayWithSize; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.data.mongodb.core.DBObjectTestUtils.getAsDBObject; +import static org.springframework.data.mongodb.core.DBObjectTestUtils.getTypedValue; import java.math.BigDecimal; import java.math.BigInteger; @@ -50,6 +66,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.annotation.Value; @@ -1866,6 +1883,21 @@ public class MappingMongoConverterUnitTests { converter.read(Item.class, source); } + /** + * @see DATAMONGO-1058 + */ + @Test + public void readShouldRespectExplicitFieldNameForDbRef() { + + BasicDBObject source = new BasicDBObject(); + source.append("explict-name-for-db-ref", new DBRef(mock(DB.class), "foo", "1")); + + converter.read(ClassWithExplicitlyNamedDBRefProperty.class, source); + + verify(resolver, times(1)).resolveDbRef(Mockito.any(MongoPersistentProperty.class), Mockito.any(DBRef.class), + Mockito.any(DbRefResolverCallback.class)); + } + static class GenericType { T content; } @@ -2116,4 +2148,16 @@ public class MappingMongoConverterUnitTests { Shape shape; } + + class ClassWithExplicitlyNamedDBRefProperty { + + @Field("explict-name-for-db-ref")// + @org.springframework.data.mongodb.core.mapping.DBRef// + ClassWithIntId dbRefProperty; + + public ClassWithIntId getDbRefProperty() { + return dbRefProperty; + } + + } }