9
9
import org .hibernate .sql .results .spi .RowTransformer ;
10
10
11
11
import java .lang .reflect .Constructor ;
12
- import java .util .Arrays ;
13
12
import java .util .List ;
14
13
15
14
import org .hibernate .query .sqm .SqmExpressible ;
@@ -33,6 +32,10 @@ public RowTransformerConstructorImpl(Class<T> type, TupleMetadata tupleMetadata)
33
32
for (int i = 0 ; i < elements .size (); i ++) {
34
33
sig [i ] = resolveElementJavaType ( elements .get ( i ) );
35
34
}
35
+ if ( sig .length == 1 && sig [0 ] == null ) {
36
+ // Can not (properly) resolve constructor for single null element
37
+ throw new InstantiationException ( "Cannot instantiate query result type, argument types are unknown " , type );
38
+ }
36
39
try {
37
40
constructor = findMatchingConstructor ( type , sig );
38
41
constructor .setAccessible ( true );
@@ -54,9 +57,7 @@ private static Class<?> resolveElementJavaType(TupleElement<?> element) {
54
57
return element .getJavaType ();
55
58
}
56
59
57
- private Constructor <T > findMatchingConstructor (
58
- Class <T > type ,
59
- Class <?>[] sig ) throws NoSuchMethodException {
60
+ private Constructor <T > findMatchingConstructor (Class <T > type , Class <?>[] sig ) throws Exception {
60
61
try {
61
62
return type .getDeclaredConstructor ( sig );
62
63
}
@@ -82,7 +83,7 @@ private Constructor<T> findMatchingConstructor(
82
83
return (Constructor <T >) constructor ;
83
84
}
84
85
}
85
- throw new NoSuchMethodException () ;
86
+ throw e ;
86
87
}
87
88
}
88
89
0 commit comments