File tree 1 file changed +19
-0
lines changed
spring-jdbc/src/main/java/org/springframework/jdbc/support
1 file changed +19
-0
lines changed Original file line number Diff line number Diff line change 38
38
import org .springframework .jdbc .datasource .DataSourceUtils ;
39
39
import org .springframework .lang .UsesJava7 ;
40
40
import org .springframework .util .ClassUtils ;
41
+ import org .springframework .util .NumberUtils ;
41
42
42
43
/**
43
44
* Generic utility methods for working with JDBC. Mainly for internal use
@@ -192,6 +193,24 @@ else if (Blob.class == requiredType) {
192
193
else if (Clob .class == requiredType ) {
193
194
return rs .getClob (index );
194
195
}
196
+ else if (requiredType .isEnum ()) {
197
+ // Enums can either be represented through a String or an enum index value:
198
+ // leave enum type conversion up to the caller (e.g. a ConversionService)
199
+ // but make sure that we return nothing other than a String or an Integer.
200
+ Object obj = rs .getObject (index );
201
+ if (obj instanceof String ) {
202
+ return obj ;
203
+ }
204
+ else if (obj instanceof Number ) {
205
+ // Defensively convert any Number to an Integer (as needed by our
206
+ // ConversionService's IntegerToEnumConverterFactory) for use as index
207
+ return NumberUtils .convertNumberToTargetClass ((Number ) obj , Integer .class );
208
+ }
209
+ else {
210
+ // e.g. on Postgres: getObject returns a PGObject but we need a String
211
+ return rs .getString (index );
212
+ }
213
+ }
195
214
196
215
else {
197
216
// Some unknown type desired -> rely on getObject.
You can’t perform that action at this time.
0 commit comments