hibernate/hibernate-orm · error · HibernateException

An immutable natural identifier of entity %s was altered fro

Error message

An immutable natural identifier of entity %s was altered from `%s` to `%s`

What it means

Error "An immutable natural identifier of entity %s was altered from `%s` to `%s`" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java:76

	public SingularAttributeMapping getAttribute() {
		return attribute;
	}

	@Override
	public void verifyFlushState(
			Object id,
			Object[] currentState,
			Object[] loadedState,
			SharedSessionContractImplementor session) {
		if ( !isMutable() ) {
			final var persister = getDeclaringType().getEntityPersister();
			final Object naturalId = extractNaturalIdFromEntityState( currentState );
			final Object snapshot =
					loadedState == null
							? session.getPersistenceContextInternal().getNaturalIdSnapshot( id, persister )
							: persister.getNaturalIdMapping().extractNaturalIdFromEntityState( loadedState );
			if ( !areEqual( naturalId, snapshot, session ) ) {
				throw new HibernateException(
						String.format(
								"An immutable natural identifier of entity %s was altered from `%s` to `%s`",
								persister.getEntityName(),
								snapshot,
								naturalId
						)
				);
			}
		}
		// otherwise, the natural id is mutable (!immutable), no need to do the checks
	}

	@Override
	public Object extractNaturalIdFromEntityState(Object[] state) {
		if ( state == null ) {
			return null;
		}
		else if ( state.length == 1 ) {

View on GitHub (pinned to fad1729dce)

Solutions

  1. Do not change an immutable natural id; update other attributes only, or delete and re-create the entity with the new natural id.
  2. Declare the natural id mutable if changes must be allowed.

When it happens

Trigger: Thrown at flush time when an entity's immutable simple natural id attribute has been changed compared to its loaded snapshot.

Common situations: See trigger scenarios.


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