hibernate/hibernate-orm · error · IllegalArgumentException
Query has multiple query roots
Error message
Query has multiple query roots
What it means
Error "Query has multiple query roots" thrown in hibernate/hibernate-orm.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/query/internal/KeyBasedPagination.java:47
* Manipulation of SQM query tree for key-based pagination.
*
* @author Gavin King
*/
public class KeyBasedPagination {
public static <R> SqmSelectStatement<KeyedResult<R>> paginate(
List<Order<? super R>> keyDefinition, List<Comparable<?>> keyValues,
SqmSelectStatement<KeyedResult<R>> statement, NodeBuilder builder) {
final SqmQuerySpec<?> querySpec = statement.getQuerySpec();
final List<? extends JpaSelection<?>> items = querySpec.getSelectClause().getSelectionItems();
final JpaSelection<?> selected = switch ( items.size() ) {
case 0 -> {
final List<SqmRoot<?>> sqmRoots = querySpec.getRootList();
if ( sqmRoots == null || sqmRoots.isEmpty() ) {
throw new IllegalArgumentException( "Query did not define any query roots" );
}
if ( sqmRoots.size() != 1 ) {
throw new IllegalArgumentException( "Query has multiple query roots" );
}
yield sqmRoots.get( 0 );
}
case 1 -> items.get( 0 );
default -> throw new IllegalQueryOperationException("Query has multiple items in the select list");
};
if ( selected instanceof SqmFrom<?, ?> root ) {
statement.orderBy( keyDefinition.stream().map( order -> sortSpecification( statement, order ) )
.collect( toList() ) );
statement.select( keySelection( keyDefinition, root, selected, builder ) );
if ( keyValues != null ) {
final SqmPredicate restriction = keyRestriction( keyDefinition, keyValues, root, builder );
final SqmPredicate queryWhere = querySpec.getRestriction();
statement.where( queryWhere == null ? restriction : builder.and( queryWhere, restriction ) );
}
return statement;
}
else {View on GitHub (pinned to fad1729dce)
Solutions
- Key-based pagination supports only a single query root. Rewrite the query to select from one root entity.
When it happens
Trigger: The query structure does not meet the single-root/single-select-item requirement: Query has multiple query roots
Common situations: Key-based pagination or Specifications applied to queries with zero/multiple roots or multi-item select lists.
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/9f49f3ccdc5bd8e7.
Report an issue: GitHub.