From a88612df7192905b891bf39481fa784a54bc883a Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Wed, 23 Sep 2020 20:05:43 +0200 Subject: [PATCH] DATAES-936 - Take id property from the source when deserializing an entity. Original PR: #523 (cherry picked from commit 8d4c30573297f0481e09de5ab5e419dec775c769) --- .../core/convert/MappingElasticsearchConverter.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java index e3e9bf794..10cf875cc 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java @@ -830,13 +830,21 @@ public class MappingElasticsearchConverter @Nullable public Object get(ElasticsearchPersistentProperty property) { + String fieldName = property.getFieldName(); + if (target instanceof Document) { // nested objects may have properties like 'id' which are recognized as isIdProperty() but they are not // Documents Document document = (Document) target; if (property.isIdProperty() && document.hasId()) { - return document.getId(); + Object id = null; + + // take the id property from the document source if available + if (!fieldName.contains(".")) { + id = target.get(fieldName); + } + return id != null ? id : document.getId(); } if (property.isVersionProperty() && document.hasVersion()) { @@ -849,8 +857,6 @@ public class MappingElasticsearchConverter return ((SearchDocument) target).getScore(); } - String fieldName = property.getFieldName(); - if (!fieldName.contains(".")) { return target.get(fieldName); }