diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index 4d49b3313a..7f758d4660 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -330,16 +330,17 @@ abstract class AbstractRecord extends AbstractStore implements Record { @Override public final void set(Field field, T value) { - if (isEmbeddable(field) && value instanceof EmbeddableRecord) { + if (isEmbeddable(field)) { Field[] f = embeddedFields(field); - Object[] v = ((EmbeddableRecord) value).intoArray(); + Object[] v = value instanceof EmbeddableRecord + ? ((EmbeddableRecord) value).intoArray() + : new Object[f.length]; for (int i = 0; i < f.length; i++) set(indexOrFail(fields, f[i]), f[i], v[i]); } - else { + else set(indexOrFail(fields, field), field, value); - } } final void set(int index, Field field, Object value) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 4a56c37bc7..545ccdee82 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -5337,7 +5337,7 @@ final class Tools { static final boolean isEmbeddable(Field field) { return field instanceof EmbeddableTableField - || field instanceof Val && ((Val) field).value instanceof EmbeddableRecord; + || field instanceof Val && EmbeddableRecord.class.isAssignableFrom(field.getType()); } @SuppressWarnings("unchecked") @@ -5391,7 +5391,7 @@ final class Tools { return (List) Arrays.asList(((EmbeddableTableField) e).fields); } }; - else if (field instanceof Val && ((Val) field).getValue() instanceof EmbeddableRecord) + else if (field instanceof Val && EmbeddableRecord.class.isAssignableFrom(field.getType())) return new FlatteningIterator(it) { @Override List flatten(E e) {