DATAES-281 - Setting identifier values now uses PersistentPropertyAccessor API.

DefaultResultMapper and ElasticsearchTemplate now use the PersistentPropertyAccessor API to set identifier values on objects instead of using reflection.

Original pull request: #156.
This commit is contained in:
Young Gu
2016-08-18 11:49:56 +08:00
committed by Oliver Gierke
parent 20c5d19963
commit 7e736a6271
6 changed files with 187 additions and 18 deletions

View File

@@ -177,17 +177,11 @@ public class DefaultResultMapper extends AbstractResultMapper {
private <T> void setPersistentEntityId(T result, String id, Class<T> clazz) {
if (mappingContext != null && clazz.isAnnotationPresent(Document.class)) {
PersistentProperty<ElasticsearchPersistentProperty> idProperty = mappingContext.getPersistentEntity(clazz).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)) {
Method setter = idProperty.getSetter();
if (setter != null) {
try {
setter.invoke(result, id);
} catch (Throwable t) {
LOG.error("Unable to set entity Id", t);
}
}
persistentEntity.getPropertyAccessor(result).setProperty(idProperty,id);
}
}
}

View File

@@ -1113,17 +1113,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati
}
private void setPersistentEntityId(Object entity, String id) {
PersistentProperty idProperty = getPersistentEntityFor(entity.getClass()).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)) {
Method setter = idProperty.getSetter();
if (setter != null) {
try {
setter.invoke(entity, id);
} catch (Throwable t) {
t.printStackTrace();
}
}
persistentEntity.getPropertyAccessor(entity).setProperty(idProperty,id);
}
}