Skip to content

Commit 7ab3c72

Browse files
committed
HHH-19868 RowTransformerConstructorImpl throws NullPointerException when TupleMetadata is null
1 parent 112dbbc commit 7ab3c72

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/AbstractSqmSelectionQuery.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ protected TupleMetadata buildTupleMetadata(SqmStatement<?> statement, Class<R> r
316316
if ( statement instanceof SqmSelectStatement<?> select ) {
317317
final var selections =
318318
select.getQueryPart().getFirstQuerySpec().getSelectClause().getSelections();
319-
return isTupleMetadataRequired( resultType, selections.get(0) )
319+
return isTupleMetadataRequired( resultType, selections )
320320
? getTupleMetadata( selections )
321321
: null;
322322
}
@@ -325,7 +325,8 @@ protected TupleMetadata buildTupleMetadata(SqmStatement<?> statement, Class<R> r
325325
}
326326
}
327327

328-
private static <R> boolean isTupleMetadataRequired(Class<R> resultType, SqmSelection<?> selection) {
328+
private static <R> boolean isTupleMetadataRequired(Class<R> resultType, List<SqmSelection<?>> selections) {
329+
final var selection = selections.size() == 1 ? selections.get( 0 ) : null;
329330
return isHqlTuple( selection )
330331
|| !isInstantiableWithoutMetadata( resultType )
331332
&& !isSelectionAssignableToResultType( selection, resultType );

hibernate-core/src/main/java/org/hibernate/sql/results/internal/RowTransformerConstructorImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66

77
import jakarta.persistence.TupleElement;
88
import org.hibernate.InstantiationException;
9+
import org.hibernate.query.sqm.SqmExpressible;
10+
import org.hibernate.query.sqm.tree.SqmExpressibleAccessor;
911
import org.hibernate.sql.results.spi.RowTransformer;
12+
import org.hibernate.type.spi.TypeConfiguration;
1013

1114
import java.lang.reflect.Constructor;
1215
import java.util.List;
1316

14-
import org.hibernate.query.sqm.SqmExpressible;
15-
import org.hibernate.query.sqm.tree.SqmExpressibleAccessor;
16-
import org.hibernate.type.spi.TypeConfiguration;
17-
1817
import static java.util.stream.Collectors.toList;
1918
import static org.hibernate.sql.results.graph.instantiation.internal.InstantiationHelper.findMatchingConstructor;
2019

@@ -32,6 +31,7 @@ public RowTransformerConstructorImpl(
3231
TupleMetadata tupleMetadata,
3332
TypeConfiguration typeConfiguration) {
3433
this.type = type;
34+
assert tupleMetadata != null : "TupleMetadata must not be null";
3535
final List<TupleElement<?>> elements = tupleMetadata.getList();
3636
final List<Class<?>> argumentTypes = elements.stream()
3737
.map( RowTransformerConstructorImpl::resolveElementJavaType )

0 commit comments

Comments
 (0)