diff --git a/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java b/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java index 9d4ba8ebc..78d69a0b9 100644 --- a/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java +++ b/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java @@ -108,10 +108,10 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap Assert.notNull(entity, "PersistentEntity must not be null!"); - this.createdByProperty = entity.getPersistentProperty(CreatedBy.class); - this.createdDateProperty = entity.getPersistentProperty(CreatedDate.class); - this.lastModifiedByProperty = entity.getPersistentProperty(LastModifiedBy.class); - this.lastModifiedDateProperty = entity.getPersistentProperty(LastModifiedDate.class); + this.createdByProperty = Optional.ofNullable(entity.getPersistentProperty(CreatedBy.class)); + this.createdDateProperty = Optional.ofNullable(entity.getPersistentProperty(CreatedDate.class)); + this.lastModifiedByProperty = Optional.ofNullable(entity.getPersistentProperty(LastModifiedBy.class)); + this.lastModifiedDateProperty = Optional.ofNullable(entity.getPersistentProperty(LastModifiedDate.class)); } /** diff --git a/src/main/java/org/springframework/data/convert/ClassGeneratingEntityInstantiator.java b/src/main/java/org/springframework/data/convert/ClassGeneratingEntityInstantiator.java index 6adbeb392..4f6ed2e95 100644 --- a/src/main/java/org/springframework/data/convert/ClassGeneratingEntityInstantiator.java +++ b/src/main/java/org/springframework/data/convert/ClassGeneratingEntityInstantiator.java @@ -21,10 +21,11 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.Optional; import org.springframework.asm.ClassWriter; import org.springframework.asm.MethodVisitor; @@ -33,6 +34,7 @@ import org.springframework.asm.Type; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PreferredConstructor; +import org.springframework.data.mapping.PreferredConstructor.Parameter; import org.springframework.data.mapping.model.MappingInstantiationException; import org.springframework.data.mapping.model.ParameterValueProvider; import org.springframework.data.util.TypeInformation; @@ -139,15 +141,17 @@ public class ClassGeneratingEntityInstantiator implements EntityInstantiator { return true; } - return entity.getPersistenceConstructor()// - .map(PreferredConstructor::getConstructor)// - .map(Constructor::getModifiers)// - .map(modifier -> !Modifier.isPublic(modifier)).orElse(false); + PreferredConstructor, ?> persistenceConstructor = entity.getPersistenceConstructor(); + if (persistenceConstructor == null || !Modifier.isPublic(persistenceConstructor.getConstructor().getModifiers())) { + return true; + } + + return false; } /** - * Creates a dynamically generated {@link ObjectInstantiator} for the given {@link InstantiatorKey}. There will always - * be exactly one {@link ObjectInstantiator} instance per {@link PersistentEntity}. + * Creates a dynamically generated {@link ObjectInstantiator} for the given {@link PersistentEntity}. There will + * always be exactly one {@link ObjectInstantiator} instance per {@link PersistentEntity}. *
* * @param entity @@ -202,26 +206,26 @@ public class ClassGeneratingEntityInstantiator implements EntityInstantiator { } /** - * Extracts the arguments required to invoce the given constructor from the given {@link ParameterValueProvider}. + * Extracts the arguments required to invoke the given constructor from the given {@link ParameterValueProvider}. * * @param constructor can be {@literal null}. * @param provider can be {@literal null}. * @return */ private
, T> Object[] extractInvocationArguments( - Optional extends PreferredConstructor extends T, P>> constructor, ParameterValueProvider
provider) { + PreferredConstructor extends T, P> constructor, ParameterValueProvider
provider) { - return constructor.map(it -> { + if (provider == null || constructor == null || !constructor.hasParameters()) { + return EMPTY_ARRAY; + } - if (provider == null || !it.hasParameters()) { - return EMPTY_ARRAY; - } + List