hibernate/hibernate-orm · error · SemanticException

Assignment referred to columns from multiple tables: ${assig

Error message

Assignment referred to columns from multiple tables: ${assignment.getAssignable()}

What it means

Error "Assignment referred to columns from multiple tables: ${assignment.getAssignable()}" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/query/sqm/mutation/internal/temptable/TableBasedUpdateHandler.java:233

		if ( sessionUidParameter != null ) {
			jdbcParameterBindings.addBinding( sessionUidParameter,
					new JdbcParameterBindingImpl( idTable.getSessionUidColumn().getJdbcMapping(),
							UUID.fromString( sessionUidAccess.apply( context.getSession() ) ) ) );
		}


		// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		// segment the assignments by table-reference

		for ( int i = 0; i < assignments.size(); i++ ) {
			final var assignment = assignments.get( i );
			final var assignmentColumnRefs = assignment.getAssignable().getColumnReferences();
			TableReference assignmentTableReference = null;
			for ( int c = 0; c < assignmentColumnRefs.size(); c++ ) {
				final var columnReference = assignmentColumnRefs.get( c );
				final var tableReference = resolveTableReference( columnReference, tableReferenceByAlias );
				if ( assignmentTableReference != null && assignmentTableReference != tableReference ) {
					throw new SemanticException( "Assignment referred to columns from multiple tables: "
													+ assignment.getAssignable() );
				}
				assignmentTableReference = tableReference;
			}
			assignmentsByTable.computeIfAbsent( assignmentTableReference, k -> new ArrayList<>() )
					.add( assignment );
		}

		final var executionContext = omittingLockingAndPaging( context );
		this.matchingIdsIntoIdTableInsert = createMatchingIdsIntoIdTableInsert(
				converterDelegate,
				suppliedPredicate,
				idTable,
				sessionUidParameter,
				jdbcParameterBindings,
				executionContext
		);

View on GitHub (pinned to fad1729dce)

Solutions

  1. An UPDATE assignment referred to columns from multiple tables.
  2. Restrict each update's assignments to columns of a single table, or split into multiple updates.

When it happens

Trigger: An UPDATE/INSERT assignment targets columns that cannot be handled by the mutation strategy.

Common situations: Bulk HQL update/insert statements assigning columns spread across multiple tables or columns of joined associations.


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