2222import java .util .Iterator ;
2323import java .util .Map ;
2424
25+ import org .slf4j .Logger ;
26+ import org .slf4j .LoggerFactory ;
2527import org .springframework .dao .DataRetrievalFailureException ;
2628import org .springframework .data .jdbc .core .convert .RowDocumentExtractorSupport .AggregateContext ;
2729import org .springframework .data .jdbc .core .convert .RowDocumentExtractorSupport .RowDocumentSink ;
4345 */
4446class RowDocumentResultSetExtractor {
4547
48+ private static final Logger log = LoggerFactory .getLogger (RowDocumentResultSetExtractor .class );
49+ public static final String DUPLICATE_COLUMN_WARNING = "ResultSet contains column \" {}\" multiple times. Later column index is {}" ;
50+
4651 private final RelationalMappingContext context ;
4752 private final PathToColumnMapping propertyToColumn ;
4853
@@ -66,9 +71,13 @@ static RowDocument toRowDocument(ResultSet resultSet) throws SQLException {
6671 RowDocument document = new RowDocument (columnCount );
6772
6873 for (int i = 0 ; i < columnCount ; i ++) {
74+
6975 Object rsv = JdbcUtils .getResultSetValue (resultSet , i + 1 );
7076 String columnName = md .getColumnLabel (i + 1 );
71- document .put (columnName , rsv instanceof Array a ? a .getArray () : rsv );
77+ Object old = document .put (columnName , rsv instanceof Array a ? a .getArray () : rsv );
78+ if (old != null ) {
79+ log .warn (DUPLICATE_COLUMN_WARNING , columnName , i );
80+ }
7281 }
7382
7483 return document ;
@@ -107,7 +116,12 @@ public Map<String, Integer> getColumnMap(ResultSet result) {
107116 Map <String , Integer > columns = new LinkedCaseInsensitiveMap <>(metaData .getColumnCount ());
108117
109118 for (int i = 0 ; i < metaData .getColumnCount (); i ++) {
110- columns .put (metaData .getColumnLabel (i + 1 ), i + 1 );
119+
120+ String columnLabel = metaData .getColumnLabel (i + 1 );
121+ Object old = columns .put (columnLabel , i + 1 );
122+ if (old != null ) {
123+ log .warn (DUPLICATE_COLUMN_WARNING , columnLabel , i );
124+ }
111125 }
112126 return columns ;
113127 } catch (SQLException e ) {
0 commit comments