diff --git a/.gitignore b/.gitignore index ffcd4ebeb..adadb46a7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ target/ .classpath .project -.settings/* +.settings *.iml -.idea/* +.idea diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java b/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java index 48c4ea6d7..3ec4cb013 100644 --- a/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java +++ b/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java @@ -82,7 +82,7 @@ public R read(Class clazz, CouchbaseDocument doc) { protected R read(TypeInformation type, CouchbaseDocument doc) { return read(type, doc, null); } - + protected R read(TypeInformation type, final CouchbaseDocument source, Object parent) { if (source == null) { @@ -118,13 +118,17 @@ protected R read(final CouchbasePersistentEntity entity, f entity.doWithProperties(new PropertyHandler() { public void doWithPersistentProperty(final CouchbasePersistentProperty prop) { - if (!source.containsKey(prop.getFieldName()) || entity.isConstructorArgument(prop)) { + if (!doesPropertyExistInSource(prop) || entity.isConstructorArgument(prop)) { return; } Object obj = prop.isIdProperty() ? source.getId() : getValueInternal(prop, source, evaluator, result); wrapper.setProperty(prop, obj, useFieldAccessOnly); } + + private boolean doesPropertyExistInSource(CouchbasePersistentProperty property) { + return property.isIdProperty() || source.containsKey(property.getFieldName()); + } }); entity.doWithAssociations(new AssociationHandler() { @@ -201,7 +205,6 @@ private Object getPotentiallyConvertedSimpleRead(Object value, Class target) return target.isAssignableFrom(value.getClass()) ? value : conversionService.convert(value, target); } - @Override public void write(final Object source, final CouchbaseDocument target) { if (source == null) { diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java index 70e97eb52..1a5e3c37e 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java @@ -90,5 +90,8 @@ public class Beer { String description; + public String getId() { + return id; + } } } diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index 99c4e4150..1bf14f4d5 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -69,7 +69,6 @@ public void needsIDOnEntity() { new CouchbaseDocument()); } - @Test public void writesString() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -94,7 +93,6 @@ public void readsString() { assertEquals("foobar", converted.attr0); } - @Test public void writesNumber() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -119,7 +117,6 @@ public void readsNumber() { assertEquals(42, converted.attr0); } - @Test public void writesBoolean() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -176,6 +173,15 @@ public void readsMixedSimpleTypes() { assertTrue(converted.attr3); } + @Test + public void readsID() { + CouchbaseDocument document = new CouchbaseDocument("001"); + + BasicCouchbasePersistentPropertyTests.Beer beer = converter.read(BasicCouchbasePersistentPropertyTests.Beer.class, + document); + + assertEquals("001", beer.getId()); + } @Test public void writesUninitializedValues() { @@ -336,7 +342,6 @@ public void writesAndReadsSetAndNestedSet() { assertEquals(attr2, readConverted.attr2); } - @Test public void writesAndReadsValueClass() { CouchbaseDocument converted = new CouchbaseDocument();