From c2a31bf0c79ea4bee102120f3518619bc2a0d038 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 17 Sep 2015 13:40:27 +0200 Subject: [PATCH] [#3082] Fixed mapping of nested collections / arrays --- .../org/jooq/impl/DefaultRecordMapper.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java index 05751c0e9c..9989ef9554 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java @@ -58,10 +58,12 @@ import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Proxy; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -586,6 +588,7 @@ public class DefaultRecordMapper implements RecordMapper implements RecordMapper mType = method.getParameterTypes()[0]; + Object value = record.getValue(i, mType); + + // [#3082] Map nested collection types + if (value instanceof Collection && List.class.isAssignableFrom(mType)) { + Class componentType = (Class) ((ParameterizedType) method.getGenericParameterTypes()[0]).getActualTypeArguments()[0]; + method.invoke(result, Convert.convert((Collection) value, componentType)); + } + + // Default reference types (including arrays) + else { + method.invoke(result, record.getValue(i, mType)); + } } } @@ -632,6 +647,7 @@ public class DefaultRecordMapper implements RecordMapper mType = member.getType(); @@ -661,8 +677,20 @@ public class DefaultRecordMapper implements RecordMapper