From 5e2f16c678b99fa44e95fbb0b46d080b388fcf05 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 15 Aug 2012 16:38:56 +0200 Subject: [PATCH] DATAMONGO-508 - Eagerly return DBRef creation if the given value already is a DBRef. --- .../core/convert/MappingMongoConverter.java | 4 ++++ .../convert/MappingMongoConverterUnitTests.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+) 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 68bfe67f1..359c4cd5d 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 @@ -671,6 +671,10 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App Assert.notNull(target); + if (target instanceof DBRef) { + return (DBRef) target; + } + MongoPersistentEntity targetEntity = mappingContext.getPersistentEntity(target.getClass()); if (null == targetEntity) { 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 18d231a6e..1c329014b 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 @@ -1278,6 +1278,20 @@ public class MappingMongoConverterUnitTests { fail(String.format("Didn't find synthetic field on %s!", target)); } + /** + * @see DATAMGONGO-508 + */ + @Test + public void eagerlyReturnsDBRefObjectIfTargetAlreadyIsOne() { + + DB db = mock(DB.class); + DBRef dbRef = new DBRef(db, "collection", "id"); + + org.springframework.data.mongodb.core.mapping.DBRef annotation = mock(org.springframework.data.mongodb.core.mapping.DBRef.class); + + assertThat(converter.createDBRef(dbRef, annotation), is(dbRef)); + } + static class GenericType { T content; }