Skip to content

Commit 2b60128

Browse files
praseodymakonczak
authored andcommitted
DATAES-228 Fix id handling for indexing
When an id is set in the IndexQuery object, use it without requiring an @document annotation. When it is not, try to resolve it from the object when it has @document and @id annotations.
1 parent 53b5871 commit 2b60128

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.io.BufferedReader;
2929
import java.io.IOException;
3030
import java.io.InputStreamReader;
31+
import java.lang.reflect.Method;
3132
import java.util.*;
3233

3334
import org.elasticsearch.action.ListenableActionFuture;
@@ -102,6 +103,7 @@
102103
* @author Mason Chan
103104
* @author Young Gu
104105
* @author Oliver Gierke
106+
* @author Mark Janssen
105107
*/
106108

107109
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
@@ -1013,13 +1015,10 @@ private IndexRequestBuilder prepareIndex(IndexQuery query) {
10131015
IndexRequestBuilder indexRequestBuilder = null;
10141016

10151017
if (query.getObject() != null) {
1016-
String entityId = null;
1017-
if (isDocument(query.getObject().getClass())) {
1018-
entityId = getPersistentEntityId(query.getObject());
1019-
}
1018+
String id = isBlank(query.getId()) ? getPersistentEntityId(query.getObject()) : query.getId();
10201019
// If we have a query id and a document id, do not ask ES to generate one.
1021-
if (query.getId() != null && entityId != null) {
1022-
indexRequestBuilder = client.prepareIndex(indexName, type, query.getId());
1020+
if (id != null) {
1021+
indexRequestBuilder = client.prepareIndex(indexName, type, id);
10231022
} else {
10241023
indexRequestBuilder = client.prepareIndex(indexName, type);
10251024
}
@@ -1096,18 +1095,18 @@ public ElasticsearchPersistentEntity getPersistentEntityFor(Class clazz) {
10961095
}
10971096

10981097
private String getPersistentEntityId(Object entity) {
1099-
1098+
11001099
ElasticsearchPersistentEntity<?> persistentEntity = getPersistentEntityFor(entity.getClass());
11011100
Object identifier = persistentEntity.getIdentifierAccessor(entity).getIdentifier();
1102-
1101+
11031102
return identifier == null ? null : String.valueOf(identifier);
11041103
}
11051104

11061105
private void setPersistentEntityId(Object entity, String id) {
1107-
1106+
11081107
ElasticsearchPersistentEntity<?> persistentEntity = getPersistentEntityFor(entity.getClass());
11091108
PersistentProperty<?> idProperty = persistentEntity.getIdProperty();
1110-
1109+
11111110
// Only deal with String because ES generated Ids are strings !
11121111
if (idProperty != null && idProperty.getType().isAssignableFrom(String.class)) {
11131112
persistentEntity.getPropertyAccessor(entity).setProperty(idProperty,id);

0 commit comments

Comments
 (0)