Skip to content

Commit 4c482e6

Browse files
committed
Add Map to ElasticsearchSimpleTypes.
See #1675.
1 parent 4fb13f0 commit 4c482e6

File tree

3 files changed

+39
-23
lines changed

3 files changed

+39
-23
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java

+14-16
Original file line numberDiff line numberDiff line change
@@ -277,28 +277,26 @@ private <T> T updateIndexedObject(T entity, IndexedObjectInformation indexedObje
277277
routingResolver);
278278
adaptibleEntity.populateIdIfNecessary(indexedObjectInformation.getId());
279279

280-
ElasticsearchPersistentEntity<?> persistentEntity = getRequiredPersistentEntity(entity.getClass());
281-
PersistentPropertyAccessor<Object> propertyAccessor = persistentEntity.getPropertyAccessor(entity);
282-
283-
if (indexedObjectInformation.getSeqNo() != null && indexedObjectInformation.getPrimaryTerm() != null
284-
&& persistentEntity.hasSeqNoPrimaryTermProperty()) {
285-
ElasticsearchPersistentProperty seqNoPrimaryTermProperty = persistentEntity.getSeqNoPrimaryTermProperty();
286-
propertyAccessor.setProperty(seqNoPrimaryTermProperty,
287-
new SeqNoPrimaryTerm(indexedObjectInformation.getSeqNo(), indexedObjectInformation.getPrimaryTerm()));
288-
}
280+
ElasticsearchPersistentEntity<?> persistentEntity = getPersistentEntityFor(entity.getClass());
281+
if (persistentEntity != null) {
282+
PersistentPropertyAccessor<Object> propertyAccessor = persistentEntity.getPropertyAccessor(entity);
283+
284+
if (indexedObjectInformation.getSeqNo() != null && indexedObjectInformation.getPrimaryTerm() != null
285+
&& persistentEntity.hasSeqNoPrimaryTermProperty()) {
286+
ElasticsearchPersistentProperty seqNoPrimaryTermProperty = persistentEntity.getSeqNoPrimaryTermProperty();
287+
propertyAccessor.setProperty(seqNoPrimaryTermProperty,
288+
new SeqNoPrimaryTerm(indexedObjectInformation.getSeqNo(), indexedObjectInformation.getPrimaryTerm()));
289+
}
289290

290-
if (indexedObjectInformation.getVersion() != null && persistentEntity.hasVersionProperty()) {
291-
ElasticsearchPersistentProperty versionProperty = persistentEntity.getVersionProperty();
292-
propertyAccessor.setProperty(versionProperty, indexedObjectInformation.getVersion());
291+
if (indexedObjectInformation.getVersion() != null && persistentEntity.hasVersionProperty()) {
292+
ElasticsearchPersistentProperty versionProperty = persistentEntity.getVersionProperty();
293+
propertyAccessor.setProperty(versionProperty, indexedObjectInformation.getVersion());
294+
}
293295
}
294296

295297
return entity;
296298
}
297299

298-
private ElasticsearchPersistentEntity<?> getRequiredPersistentEntity(Class<?> clazz) {
299-
return converter.getMappingContext().getRequiredPersistentEntity(clazz);
300-
}
301-
302300
@Override
303301
public <T> Flux<T> multiGet(Query query, Class<T> clazz) {
304302
return multiGet(query, clazz, getIndexCoordinatesFor(clazz));

Diff for: src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java

+22-7
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty;
108108
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
109109
import org.springframework.data.elasticsearch.core.query.*;
110+
import org.springframework.data.mapping.context.MappingContext;
110111
import org.springframework.lang.Nullable;
111112
import org.springframework.util.Assert;
112113
import org.springframework.util.StringUtils;
@@ -1730,21 +1731,35 @@ private ElasticsearchPersistentEntity<?> getPersistentEntity(@Nullable Class<?>
17301731
@Nullable
17311732
private String getPersistentEntityId(Object entity) {
17321733

1733-
Object identifier = elasticsearchConverter.getMappingContext() //
1734-
.getRequiredPersistentEntity(entity.getClass()) //
1735-
.getIdentifierAccessor(entity).getIdentifier();
1734+
MappingContext<? extends ElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> mappingContext = elasticsearchConverter
1735+
.getMappingContext();
17361736

1737-
if (identifier != null) {
1738-
return identifier.toString();
1737+
ElasticsearchPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(entity.getClass());
1738+
1739+
if (persistentEntity != null) {
1740+
Object identifier = persistentEntity //
1741+
.getIdentifierAccessor(entity).getIdentifier();
1742+
1743+
if (identifier != null) {
1744+
return identifier.toString();
1745+
}
17391746
}
17401747

17411748
return null;
17421749
}
17431750

17441751
private VersionType retrieveVersionTypeFromPersistentEntity(Class<?> clazz) {
17451752

1746-
VersionType versionType = elasticsearchConverter.getMappingContext().getRequiredPersistentEntity(clazz)
1747-
.getVersionType();
1753+
MappingContext<? extends ElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> mappingContext = elasticsearchConverter
1754+
.getMappingContext();
1755+
1756+
ElasticsearchPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(clazz);
1757+
1758+
VersionType versionType = null;
1759+
1760+
if (persistentEntity != null) {
1761+
versionType = persistentEntity.getVersionType();
1762+
}
17481763

17491764
return versionType != null ? versionType : VersionType.EXTERNAL;
17501765
}

Diff for: src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchSimpleTypes.java

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.Collections;
1919
import java.util.HashSet;
20+
import java.util.Map;
2021
import java.util.Set;
2122

2223
import org.springframework.data.elasticsearch.core.document.Document;
@@ -40,6 +41,8 @@ public class ElasticsearchSimpleTypes {
4041

4142
Set<Class<?>> simpleTypes = new HashSet<>();
4243
simpleTypes.add(Document.class);
44+
simpleTypes.add(Map.class);
45+
4346
ELASTICSEARCH_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes);
4447
}
4548

0 commit comments

Comments
 (0)