hibernate/hibernate-orm · error · PropertyValueException

Detached entity with generated id '${id}' has an uninitializ

Error message

Detached entity with generated id '${id}' has an uninitialized version value '${version}'

What it means

Error "Detached entity with generated id '${id}' has an uninitialized version value '${version}'" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java:4622

			final Boolean isUnsaved = versionMapping.getUnsavedStrategy().isUnsaved( version );
			if ( isUnsaved != null ) {
				if ( isUnsaved ) {
					if ( version == null ) {
						final var persistenceContext = session.getPersistenceContext();
						if ( persistenceContext.hasLoadContext()
								&& !persistenceContext.getLoadContexts().isLoadingFinished() ) {
							// check if we're currently loading this entity instance, the version
							// will be null, but the entity cannot be considered transient
							final var holder = persistenceContext.getEntityHolder( new EntityKey( id, this ) );
							if ( holder != null && holder.isEventuallyInitialized() && holder.getEntity() == entity ) {
								return false;
							}
						}
					}
					if ( getGenerator() != null ) {
						final Boolean unsaved = identifierMapping.getUnsavedStrategy().isUnsaved( id );
						if ( unsaved != null && !unsaved ) {
							throw new PropertyValueException(
									"Detached entity with generated id '" + id
											+ "' has an uninitialized version value '" + version + "'",
									getEntityName(),
									getVersionColumnName()
							);
						}
					}
				}
				return isUnsaved;
			}
		}

		// check the id unsaved-value
		final Boolean result = identifierMapping.getUnsavedStrategy().isUnsaved( id );
		if ( result != null ) {
			return result;
		}

View on GitHub (pinned to fad1729dce)

Solutions

  1. Initialize the version (e.g. set 0 or let Hibernate generate on persist) before merging the detached entity.
  2. Persist new entities with persist() instead of merge() when the id is generated.

When it happens

Trigger: Thrown when merging/reattaching a detached entity whose id is generated but whose version value was never initialized.

Common situations: See trigger scenarios.


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