diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java index c1a55c217..6734c54b0 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java @@ -277,28 +277,26 @@ public class ReactiveElasticsearchTemplate implements ReactiveElasticsearchOpera routingResolver); adaptibleEntity.populateIdIfNecessary(indexedObjectInformation.getId()); - ElasticsearchPersistentEntity persistentEntity = getRequiredPersistentEntity(entity.getClass()); - PersistentPropertyAccessor propertyAccessor = persistentEntity.getPropertyAccessor(entity); + ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass()); + if (persistentEntity != null) { + PersistentPropertyAccessor propertyAccessor = persistentEntity.getPropertyAccessor(entity); - if (indexedObjectInformation.getSeqNo() != null && indexedObjectInformation.getPrimaryTerm() != null - && persistentEntity.hasSeqNoPrimaryTermProperty()) { - ElasticsearchPersistentProperty seqNoPrimaryTermProperty = persistentEntity.getSeqNoPrimaryTermProperty(); - propertyAccessor.setProperty(seqNoPrimaryTermProperty, - new SeqNoPrimaryTerm(indexedObjectInformation.getSeqNo(), indexedObjectInformation.getPrimaryTerm())); - } + if (indexedObjectInformation.getSeqNo() != null && indexedObjectInformation.getPrimaryTerm() != null + && persistentEntity.hasSeqNoPrimaryTermProperty()) { + ElasticsearchPersistentProperty seqNoPrimaryTermProperty = persistentEntity.getSeqNoPrimaryTermProperty(); + propertyAccessor.setProperty(seqNoPrimaryTermProperty, + new SeqNoPrimaryTerm(indexedObjectInformation.getSeqNo(), indexedObjectInformation.getPrimaryTerm())); + } - if (indexedObjectInformation.getVersion() != null && persistentEntity.hasVersionProperty()) { - ElasticsearchPersistentProperty versionProperty = persistentEntity.getVersionProperty(); - propertyAccessor.setProperty(versionProperty, indexedObjectInformation.getVersion()); + if (indexedObjectInformation.getVersion() != null && persistentEntity.hasVersionProperty()) { + ElasticsearchPersistentProperty versionProperty = persistentEntity.getVersionProperty(); + propertyAccessor.setProperty(versionProperty, indexedObjectInformation.getVersion()); + } } return entity; } - private ElasticsearchPersistentEntity getRequiredPersistentEntity(Class clazz) { - return converter.getMappingContext().getRequiredPersistentEntity(clazz); - } - @Override public Flux multiGet(Query query, Class clazz) { return multiGet(query, clazz, getIndexCoordinatesFor(clazz)); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java index eeee31524..2adfe70eb 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java @@ -107,6 +107,7 @@ import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersiste import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.*; +import org.springframework.data.mapping.context.MappingContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -1730,12 +1731,18 @@ class RequestFactory { @Nullable private String getPersistentEntityId(Object entity) { - Object identifier = elasticsearchConverter.getMappingContext() // - .getRequiredPersistentEntity(entity.getClass()) // - .getIdentifierAccessor(entity).getIdentifier(); + MappingContext, ElasticsearchPersistentProperty> mappingContext = elasticsearchConverter + .getMappingContext(); - if (identifier != null) { - return identifier.toString(); + ElasticsearchPersistentEntity persistentEntity = mappingContext.getPersistentEntity(entity.getClass()); + + if (persistentEntity != null) { + Object identifier = persistentEntity // + .getIdentifierAccessor(entity).getIdentifier(); + + if (identifier != null) { + return identifier.toString(); + } } return null; @@ -1743,8 +1750,16 @@ class RequestFactory { private VersionType retrieveVersionTypeFromPersistentEntity(Class clazz) { - VersionType versionType = elasticsearchConverter.getMappingContext().getRequiredPersistentEntity(clazz) - .getVersionType(); + MappingContext, ElasticsearchPersistentProperty> mappingContext = elasticsearchConverter + .getMappingContext(); + + ElasticsearchPersistentEntity persistentEntity = mappingContext.getPersistentEntity(clazz); + + VersionType versionType = null; + + if (persistentEntity != null) { + versionType = persistentEntity.getVersionType(); + } return versionType != null ? versionType : VersionType.EXTERNAL; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchSimpleTypes.java b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchSimpleTypes.java index 88b810209..6e8981d93 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchSimpleTypes.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchSimpleTypes.java @@ -17,6 +17,7 @@ package org.springframework.data.elasticsearch.core.mapping; import java.util.Collections; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.springframework.data.elasticsearch.core.document.Document; @@ -40,6 +41,8 @@ public class ElasticsearchSimpleTypes { Set> simpleTypes = new HashSet<>(); simpleTypes.add(Document.class); + simpleTypes.add(Map.class); + ELASTICSEARCH_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes); }