hibernate/hibernate-orm · error · IllegalSelectQueryException

MutationQuery cannot be treated as SelectionQuery

Error message

MutationQuery cannot be treated as SelectionQuery

What it means

Error "MutationQuery cannot be treated as SelectionQuery" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/query/internal/MutationQueryImpl.java:113

			SharedSessionContractImplementor session) {
		super( session );
		this.hql = hql;
		this.queryStringCacheKey = hql;

		this.sqm = SqmUtil.asDmlStatement( hqlInterpretation.getSqmStatement(), hql );
		this.targetType = determineTargetType( targetType, sqm.getTarget().getNodeJavaType().getJavaTypeClass() );

		this.parameterMetadata = hqlInterpretation.getParameterMetadata();
		this.domainParameterXref = hqlInterpretation.getDomainParameterXref();
		this.parameterBindings = parameterMetadata.createBindings( session.getFactory() );

		validateQuery( sqm, hql );
	}

	@Override
	@Nonnull
	public <R> SelectionQueryImplementor<R> withResultSetMapping(@Nonnull ResultSetMapping<R> mapping) {
		throw new IllegalSelectQueryException( "MutationQuery cannot be treated as SelectionQuery", hql );
	}

	private static <R> void validateQuery(SqmDmlStatement<R> sqm, String hql) {
		if ( sqm instanceof AbstractSqmDmlStatement<R> abstractSqm ) {
			abstractSqm.validate( hql );
		}
	}

	@SuppressWarnings("unchecked")
	private static <X> Class<X> determineTargetType(Class<?> providedType, Class<?> sqmTargetType) {
		if ( providedType != null && !Object.class.equals( providedType ) ) {
			return (Class<X>) providedType;
		}
		else {
			return (Class<X>) sqmTargetType;
		}
	}

View on GitHub (pinned to fad1729dce)

Solutions

  1. A mutation (insert/update/delete) query cannot be used as a selection query. Use a select query for reading results.

When it happens

Trigger: A selection-only operation is invoked on a mutation (insert/update/delete) query: MutationQuery cannot be treated as SelectionQuery

Common situations: Calling getResultList()/scroll()/unwrap(SelectionQuery) on a Query created from an update/delete/insert HQL statement, or vice versa.


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