diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 46e217529..3f1427fa7 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -841,7 +841,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { MongoPersistentProperty idProperty = entity.getIdProperty(); MongoPersistentProperty versionProperty = entity.getVersionProperty(); - Number version = beanWrapper.getProperty(versionProperty, Number.class, !versionProperty.usePropertyAccess()); + Number version = beanWrapper.getProperty(versionProperty, Number.class); // Fresh instance -> initialize version property if (version == null) { @@ -855,7 +855,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version)); // Bump version number - Number number = beanWrapper.getProperty(versionProperty, Number.class, false); + Number number = beanWrapper.getProperty(versionProperty, Number.class); beanWrapper.setProperty(versionProperty, number.longValue() + 1); BasicDBObject dbObject = new BasicDBObject(); @@ -1088,7 +1088,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { ConversionService service = mongoConverter.getConversionService(); Object idProperty = null; - idProperty = BeanWrapper.create(object, service).getProperty(idProp, Object.class, true); + idProperty = BeanWrapper.create(object, service).getProperty(idProp, Object.class); return new Query(where(idProp.getFieldName()).is(idProperty)); } @@ -1102,7 +1102,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { } ConversionService service = mongoConverter.getConversionService(); - Object idValue = BeanWrapper.create(entity, service).getProperty(idProperty, Object.class, true); + Object idValue = BeanWrapper.create(entity, service).getProperty(idProperty, Object.class); if (idValue == null && !MongoSimpleTypes.AUTOGENERATED_ID_TYPES.contains(idProperty.getType())) { throw new InvalidDataAccessApiUsageException(String.format( @@ -1614,7 +1614,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { ConversionService conversionService = mongoConverter.getConversionService(); BeanWrapper, Object> wrapper = BeanWrapper.create(savedObject, conversionService); - Object idValue = wrapper.getProperty(idProp, idProp.getType(), true); + Object idValue = wrapper.getProperty(idProp, idProp.getType()); if (idValue != null) { return; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 9bb8877f1..b901c901b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -82,7 +82,6 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App protected final QueryMapper idMapper; protected final DbRefResolver dbRefResolver; protected ApplicationContext applicationContext; - protected boolean useFieldAccessOnly = true; protected MongoTypeMapper typeMapper; protected String mapKeyDotReplacement = null; @@ -166,17 +165,6 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return mappingContext; } - /** - * Configures whether to use field access only for entity mapping. Setting this to true will force the - * {@link MongoConverter} to not go through getters or setters even if they are present for getting and setting - * property values. - * - * @param useFieldAccessOnly - */ - public void setUseFieldAccessOnly(boolean useFieldAccessOnly) { - this.useFieldAccessOnly = useFieldAccessOnly; - } - /* * (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) @@ -266,7 +254,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } Object obj = getValueInternal(prop, dbo, evaluator, result); - wrapper.setProperty(prop, obj, useFieldAccessOnly); + wrapper.setProperty(prop, obj); } }); @@ -380,10 +368,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App if (!dbo.containsField("_id") && null != idProperty) { - boolean fieldAccessOnly = idProperty.usePropertyAccess() ? false : useFieldAccessOnly; - try { - Object id = wrapper.getProperty(idProperty, Object.class, fieldAccessOnly); + Object id = wrapper.getProperty(idProperty, Object.class); dbo.put("_id", idMapper.convertId(id)); } catch (ConversionException ignored) {} } @@ -396,9 +382,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return; } - boolean fieldAccessOnly = prop.usePropertyAccess() ? false : useFieldAccessOnly; - - Object propertyObj = wrapper.getProperty(prop, prop.getType(), fieldAccessOnly); + Object propertyObj = wrapper.getProperty(prop); if (null != propertyObj) { if (!conversions.isSimpleType(propertyObj.getClass())) { @@ -414,7 +398,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App public void doWithAssociation(Association association) { MongoPersistentProperty inverseProp = association.getInverse(); Class type = inverseProp.getType(); - Object propertyObj = wrapper.getProperty(inverseProp, type, useFieldAccessOnly); + Object propertyObj = wrapper.getProperty(inverseProp, type); if (null != propertyObj) { writePropertyInternal(propertyObj, dbo, inverseProp); } @@ -769,7 +753,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App id = target; } else { BeanWrapper, Object> wrapper = BeanWrapper.create(target, conversionService); - id = wrapper.getProperty(idProperty, Object.class, useFieldAccessOnly); + id = wrapper.getProperty(idProperty, Object.class); } if (null == id) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java index 3ab078b23..02ad1c50c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java @@ -15,7 +15,6 @@ */ package org.springframework.data.mongodb.core.index; -import java.lang.reflect.Field; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -119,22 +118,20 @@ public class MongoPersistentEntityIndexCreator implements } entity.doWithProperties(new PropertyHandler() { - public void doWithPersistentProperty(MongoPersistentProperty persistentProperty) { + public void doWithPersistentProperty(MongoPersistentProperty property) { - Field field = persistentProperty.getField(); + if (property.isAnnotationPresent(Indexed.class)) { - if (field.isAnnotationPresent(Indexed.class)) { - - Indexed index = field.getAnnotation(Indexed.class); + Indexed index = property.findAnnotation(Indexed.class); String name = index.name(); if (!StringUtils.hasText(name)) { - name = persistentProperty.getFieldName(); + name = property.getFieldName(); } else { - if (!name.equals(field.getName()) && index.unique() && !index.sparse()) { + if (!name.equals(property.getName()) && index.unique() && !index.sparse()) { // Names don't match, and sparse is not true. This situation will generate an error on the server. if (LOGGER.isWarnEnabled()) { - LOGGER.warn("The index name " + name + " doesn't match this property name: " + field.getName() + LOGGER.warn("The index name " + name + " doesn't match this property name: " + property.getName() + ". Setting sparse=true on this index will prevent errors when inserting documents."); } } @@ -142,7 +139,7 @@ public class MongoPersistentEntityIndexCreator implements String collection = StringUtils.hasText(index.collection()) ? index.collection() : entity.getCollection(); int direction = index.direction() == IndexDirection.ASCENDING ? 1 : -1; - DBObject definition = new BasicDBObject(persistentProperty.getFieldName(), direction); + DBObject definition = new BasicDBObject(property.getFieldName(), direction); ensureIndex(collection, name, definition, index.unique(), index.dropDups(), index.sparse(), index.background(), index.expireAfterSeconds()); @@ -151,13 +148,13 @@ public class MongoPersistentEntityIndexCreator implements LOGGER.debug("Created property index " + index); } - } else if (field.isAnnotationPresent(GeoSpatialIndexed.class)) { + } else if (property.isAnnotationPresent(GeoSpatialIndexed.class)) { - GeoSpatialIndexed index = field.getAnnotation(GeoSpatialIndexed.class); + GeoSpatialIndexed index = property.findAnnotation(GeoSpatialIndexed.class); - GeospatialIndex indexObject = new GeospatialIndex(persistentProperty.getFieldName()); + GeospatialIndex indexObject = new GeospatialIndex(property.getFieldName()); indexObject.withMin(index.min()).withMax(index.max()); - indexObject.named(StringUtils.hasText(index.name()) ? index.name() : field.getName()); + indexObject.named(StringUtils.hasText(index.name()) ? index.name() : property.getName()); indexObject.typed(index.type()).withBucketSize(index.bucketSize()) .withAdditionalField(index.additionalField()); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentProperty.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentProperty.java index 2f7638b68..ad15ca46b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentProperty.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentProperty.java @@ -29,7 +29,6 @@ import org.springframework.data.mapping.Association; import org.springframework.data.mapping.model.AnnotationBasedPersistentProperty; import org.springframework.data.mapping.model.MappingException; import org.springframework.data.mapping.model.SimpleTypeHolder; -import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; import com.mongodb.DBObject; @@ -50,17 +49,14 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope private static final Set> SUPPORTED_ID_TYPES = new HashSet>(); private static final Set SUPPORTED_ID_PROPERTY_NAMES = new HashSet(); - private static final Field CAUSE_FIELD; - static { + SUPPORTED_ID_TYPES.add(ObjectId.class); SUPPORTED_ID_TYPES.add(String.class); SUPPORTED_ID_TYPES.add(BigInteger.class); SUPPORTED_ID_PROPERTY_NAMES.add("id"); SUPPORTED_ID_PROPERTY_NAMES.add("_id"); - - CAUSE_FIELD = ReflectionUtils.findField(Throwable.class, "cause"); } private final FieldNamingStrategy fieldNamingStrategy; @@ -86,14 +82,6 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope } } - /* (non-Javadoc) - * @see org.springframework.data.mapping.FooBasicPersistentProperty#isAssociation() - */ - @Override - public boolean isAssociation() { - return field.isAnnotationPresent(DBRef.class) || super.isAssociation(); - } - /** * Also considers fields as id that are of supported id type and name. * @@ -108,7 +96,7 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope } // We need to support a wider range of ID types than just the ones that can be converted to an ObjectId - return SUPPORTED_ID_PROPERTY_NAMES.contains(field.getName()); + return SUPPORTED_ID_PROPERTY_NAMES.contains(getName()); } /* @@ -163,8 +151,7 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope * @see org.springframework.data.mongodb.core.mapping.MongoPersistentProperty#getFieldOrder() */ public int getFieldOrder() { - org.springframework.data.mongodb.core.mapping.Field annotation = getField().getAnnotation( - org.springframework.data.mongodb.core.mapping.Field.class); + org.springframework.data.mongodb.core.mapping.Field annotation = findAnnotation(org.springframework.data.mongodb.core.mapping.Field.class); return annotation != null ? annotation.order() : Integer.MAX_VALUE; } @@ -182,7 +169,7 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope * @see org.springframework.data.mongodb.core.mapping.MongoPersistentProperty#isDbReference() */ public boolean isDbReference() { - return getField().isAnnotationPresent(DBRef.class); + return isAnnotationPresent(DBRef.class); } /* @@ -190,14 +177,6 @@ public class BasicMongoPersistentProperty extends AnnotationBasedPersistentPrope * @see org.springframework.data.mongodb.core.mapping.MongoPersistentProperty#getDBRef() */ public DBRef getDBRef() { - return getField().getAnnotation(DBRef.class); - } - - /* - * (non-Javadoc) - * @see org.springframework.data.mongodb.core.mapping.MongoPersistentProperty#usePropertyAccess() - */ - public boolean usePropertyAccess() { - return CAUSE_FIELD.equals(getField()); + return findAnnotation(DBRef.class); } }