diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java index a0a0a1129b..13d575715b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java @@ -63,6 +63,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -339,6 +340,9 @@ public class DefaultRecordMapper implements RecordMapper constructor : constructors) { @@ -349,14 +353,12 @@ public class DefaultRecordMapper implements RecordMapper 0) - delegate = new ImmutablePOJOMapperWithParameterNames( - constructor, - Arrays.stream(parameters).map(Parameter::getName).collect(Collectors.toList()) - ); + delegate = new ImmutablePOJOMapperWithParameterNames(constructor, + collectParameterNames(parameters)); } @@ -367,9 +369,25 @@ public class DefaultRecordMapper implements RecordMapper constructor = constructors[0]; + Parameter[] parameters = constructor.getParameters(); + if (parameters != null && parameters.length > 0) { + delegate = new ImmutablePOJOMapperWithParameterNames(constructor, collectParameterNames(parameters)); + return; + } + } + throw new MappingException("No matching constructor found on type " + type + " for row type " + rowType); } + private List collectParameterNames(Parameter[] parameters) { + return Arrays.stream(parameters).map(Parameter::getName).collect(Collectors.toList()); + } + @Override public final E map(R record) { if (record == null) {