diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java index 3a88c5653..85a4feeaa 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java @@ -50,6 +50,8 @@ public class PreferredConstructorDiscoverer { */ protected PreferredConstructorDiscoverer(TypeInformation owningType) { + boolean noArgConstructorFound = false; + int numberOfArgConstructors = 0; Class rawOwningType = owningType.getType(); for (Constructor constructor : rawOwningType.getDeclaredConstructors()) { @@ -63,9 +65,20 @@ public class PreferredConstructorDiscoverer { return; } - if (preferredConstructor.isNoArgConstructor()) { + // No-arg constructor trumps custom ones + if (this.constructor == null || preferredConstructor.isNoArgConstructor()) { this.constructor = preferredConstructor; } + + if (preferredConstructor.isNoArgConstructor()) { + noArgConstructorFound = true; + } else { + numberOfArgConstructors++; + } + } + + if (!noArgConstructorFound && numberOfArgConstructors > 1) { + this.constructor = null; } } diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java index 07a6d0c53..0147e4e4e 100644 --- a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java +++ b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java @@ -19,7 +19,6 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.Iterator; -import java.util.List; import org.junit.Test; import org.springframework.data.annotation.PersistenceConstructor;