diff --git a/pom.xml b/pom.xml
index 5b22a688d..611fa82b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,7 +130,7 @@
org.projectlombok
lombok
- 1.16.4
+ ${lombok}
test
diff --git a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java
index 5d28b3bac..f58e5d6ea 100644
--- a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2014 the original author or authors.
+ * Copyright 2014-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@ package org.springframework.data.elasticsearch.core;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
@@ -48,6 +47,8 @@ import org.springframework.data.mapping.context.MappingContext;
/**
* @author Artur Konczak
+ * @author Young Gu
+ * @author Oliver Gierke
*/
public class DefaultResultMapper extends AbstractResultMapper {
@@ -169,12 +170,15 @@ public class DefaultResultMapper extends AbstractResultMapper {
}
private void setPersistentEntityId(T result, String id, Class clazz) {
+
if (mappingContext != null && clazz.isAnnotationPresent(Document.class)) {
- ElasticsearchPersistentEntity persistentEntity = mappingContext.getPersistentEntity(clazz);
- PersistentProperty idProperty = persistentEntity.getIdProperty();
+
+ ElasticsearchPersistentEntity> persistentEntity = mappingContext.getPersistentEntity(clazz);
+ PersistentProperty> idProperty = persistentEntity.getIdProperty();
+
// Only deal with String because ES generated Ids are strings !
if (idProperty != null && idProperty.getType().isAssignableFrom(String.class)) {
- persistentEntity.getPropertyAccessor(result).setProperty(idProperty,id);
+ persistentEntity.getPropertyAccessor(result).setProperty(idProperty, id);
}
}
}
diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
index 76bcbc2e7..d0d23910a 100755
--- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
@@ -28,7 +28,6 @@ import static org.springframework.util.CollectionUtils.isEmpty;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.lang.reflect.Method;
import java.util.*;
import org.elasticsearch.action.ListenableActionFuture;
@@ -98,6 +97,8 @@ import org.springframework.util.Assert;
* @author Artur Konczak
* @author Kevin Leturc
* @author Mason Chan
+ * @author Young Gu
+ * @author Oliver Gierke
*/
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
@@ -1081,26 +1082,18 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
}
private String getPersistentEntityId(Object entity) {
- PersistentProperty idProperty = getPersistentEntityFor(entity.getClass()).getIdProperty();
- if (idProperty != null) {
- Method getter = idProperty.getGetter();
- if (getter != null) {
- try {
- Object id = getter.invoke(entity);
- if (id != null) {
- return String.valueOf(id);
- }
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
- }
- return null;
+
+ ElasticsearchPersistentEntity> persistentEntity = getPersistentEntityFor(entity.getClass());
+ Object identifier = persistentEntity.getIdentifierAccessor(entity).getIdentifier();
+
+ return identifier == null ? null : String.valueOf(identifier);
}
private void setPersistentEntityId(Object entity, String id) {
- ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass());
- PersistentProperty idProperty = persistentEntity.getIdProperty();
+
+ ElasticsearchPersistentEntity> persistentEntity = getPersistentEntityFor(entity.getClass());
+ PersistentProperty> idProperty = persistentEntity.getIdProperty();
+
// Only deal with String because ES generated Ids are strings !
if (idProperty != null && idProperty.getType().isAssignableFrom(String.class)) {
persistentEntity.getPropertyAccessor(entity).setProperty(idProperty,id);
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java b/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java
index 5d6c2b379..61bc6d3f4 100644
--- a/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/DefaultResultMapperTests.java
@@ -19,11 +19,13 @@ import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
-import com.fasterxml.jackson.databind.util.ArrayIterator;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
@@ -35,8 +37,12 @@ import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.data.domain.Page;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
import org.springframework.data.elasticsearch.entities.Car;
+import com.fasterxml.jackson.databind.util.ArrayIterator;
+
/**
* @author Artur Konczak
* @author Mohsin Husen
@@ -51,7 +57,7 @@ public class DefaultResultMapperTests {
@Before
public void init() {
MockitoAnnotations.initMocks(this);
- resultMapper = new DefaultResultMapper();
+ resultMapper = new DefaultResultMapper(new SimpleElasticsearchMappingContext());
}
@Test
@@ -104,6 +110,22 @@ public class DefaultResultMapperTests {
assertThat(result.getModel(), is("Grat"));
assertThat(result.getName(), is("Ford"));
}
+
+ /**
+ * @see DATAES-281.
+ */
+ @Test
+ public void setsIdentifierOnImmutableType() {
+
+ GetResponse response = mock(GetResponse.class);
+ when(response.getSourceAsString()).thenReturn("{}");
+ when(response.getId()).thenReturn("identifier");
+
+ ImmutableEntity result = resultMapper.mapResult(response, ImmutableEntity.class);
+
+ assertThat(result, is(notNullValue()));
+ assertThat(result.getId(), is("identifier"));
+ }
private SearchHit createCarHit(String name, String model) {
SearchHit hit = mock(SearchHit.class);
@@ -132,4 +154,12 @@ public class DefaultResultMapperTests {
result.put("model", new InternalSearchHitField("model", Arrays.