diff --git a/src/main/java/org/springframework/data/r2dbc/convert/MappingR2dbcConverter.java b/src/main/java/org/springframework/data/r2dbc/convert/MappingR2dbcConverter.java index 6bce82d..d8680ae 100644 --- a/src/main/java/org/springframework/data/r2dbc/convert/MappingR2dbcConverter.java +++ b/src/main/java/org/springframework/data/r2dbc/convert/MappingR2dbcConverter.java @@ -647,7 +647,7 @@ public class MappingR2dbcConverter extends BasicRelationalConverter implements R return row.get(idColumnName); } - Iterable columns = metadata.getColumnMetadatas(); + Iterable columns = RowMetadataUtils.getColumnMetadata(metadata); Iterator it = columns.iterator(); if (it.hasNext()) { diff --git a/src/main/java/org/springframework/data/r2dbc/convert/RowMetadataUtils.java b/src/main/java/org/springframework/data/r2dbc/convert/RowMetadataUtils.java index cdb4138..8647be1 100644 --- a/src/main/java/org/springframework/data/r2dbc/convert/RowMetadataUtils.java +++ b/src/main/java/org/springframework/data/r2dbc/convert/RowMetadataUtils.java @@ -18,6 +18,11 @@ package org.springframework.data.r2dbc.convert; import io.r2dbc.spi.ColumnMetadata; import io.r2dbc.spi.RowMetadata; +import java.lang.reflect.Method; + +import org.springframework.lang.Nullable; +import org.springframework.util.ReflectionUtils; + /** * Utility methods for {@link io.r2dbc.spi.RowMetadata} * @@ -26,6 +31,9 @@ import io.r2dbc.spi.RowMetadata; */ class RowMetadataUtils { + private static final @Nullable Method getColumnMetadatas = ReflectionUtils.findMethod(RowMetadata.class, + "getColumnMetadatas"); + /** * Check whether the column {@code name} is contained in {@link RowMetadata}. The check happens case-insensitive. * @@ -35,7 +43,9 @@ class RowMetadataUtils { */ public static boolean containsColumn(RowMetadata metadata, String name) { - for (ColumnMetadata columnMetadata : metadata.getColumnMetadatas()) { + Iterable columns = getColumnMetadata(metadata); + + for (ColumnMetadata columnMetadata : columns) { if (name.equalsIgnoreCase(columnMetadata.getName())) { return true; } @@ -43,4 +53,22 @@ class RowMetadataUtils { return false; } + + /** + * Return the {@link Iterable} of {@link ColumnMetadata} from {@link RowMetadata}. + * + * @param metadata the metadata object to inspect. + * @return + * @since 1.3.8 + */ + @SuppressWarnings("unchecked") + public static Iterable getColumnMetadata(RowMetadata metadata) { + + if (getColumnMetadatas != null) { + // Return type of RowMetadata.getColumnMetadatas was updated with R2DBC 0.9. + return (Iterable) ReflectionUtils.invokeMethod(getColumnMetadatas, metadata); + } + + return metadata.getColumnMetadatas(); + } }