hibernate/hibernate-orm · error · IllegalArgumentException

Can't emulate fetch clause type: {}

Error message

Can't emulate fetch clause type: {}

What it means

Error "Can't emulate fetch clause type: {}" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/H2SqlAstTranslator.java:262

	@Override
	public void visitOffsetFetchClause(QueryPart queryPart) {
		if ( !currentFullJoinEmulationHelper().isFullJoinEmulationQueryPart( queryPart ) ) {
			if ( isRowsOnlyFetchClauseType( queryPart ) ) {
				if ( supportsOffsetFetchClause() ) {
					renderOffsetFetchClause( queryPart, true );
				}
				else {
					renderLimitOffsetClause( queryPart );
				}
			}
			else {
				if ( supportsOffsetFetchClausePercentWithTies() ) {
					renderOffsetFetchClause( queryPart, true );
				}
				else {
					// FETCH PERCENT and WITH TIES were introduced along with window functions
					throw new IllegalArgumentException(
							"Can't emulate fetch clause type: " + queryPart.getFetchClauseType() );
				}
			}
		}
	}

	@Override
	protected void renderSelectTupleComparison(
			List<SqlSelection> lhsExpressions,
			SqlTuple tuple,
			ComparisonOperator operator) {
		emulateSelectTupleComparison( lhsExpressions, tuple.getExpressions(), operator, true );
	}

	@Override
	protected void visitSqlSelections(SelectClause selectClause) {
		final boolean renderAsArray = this.renderAsArray;
		this.renderAsArray = false;

View on GitHub (pinned to fad1729dce)

Solutions

  1. Use a fetch clause type supported by H2 (e.g. ROWS ONLY) or switch to limit/offset pagination
  2. Avoid PERCENT or WITH TIES fetch clauses on H2

When it happens

Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/H2SqlAstTranslator.java:262 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/a81b9192d5c1a707. Report an issue: GitHub.