hibernate/hibernate-orm · error · IdentifierGenerationException

Identifier generator must generate on insert

Error message

Identifier generator must generate on insert

What it means

Error "Identifier generator must generate on insert" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java:417

		catch ( RuntimeException e ) {
			throw getExceptionConverter().convert( e );
		}
	}

	private Object doInsert(String entityName, Object entity) {
		checkNotReadOnly();
		final var persister = getEntityPersister( entityName, entity );
		final Object id;
		final Object[] state = persister.getValues( entity );
		if ( persister.isVersioned() ) {
			if ( seedVersion( entity, state, persister, this ) ) {
				persister.setValues( entity, state );
			}
		}
		final var generator = persister.getGenerator();
		if ( generator.generatedBeforeExecution( entity, this ) ) {
			if ( !generator.generatesOnInsert() ) {
				throw new IdentifierGenerationException( "Identifier generator must generate on insert" );
			}
			final Object currentValue = generator.allowAssignedIdentifiers() ? persister.getIdentifier( entity ) : null;
			id = ( (BeforeExecutionGenerator) generator ).generate( this, entity, currentValue, INSERT );
			persister.setIdentifier( entity, id, this );
			if ( firePreInsert(entity, id, state, persister) ) {
				return id;
			}
			else {
				runInterceptorCallback(
						() -> getInterceptor().onInsert( entity, id, state, persister.getPropertyNames(), persister.getPropertyTypes() ) );
				final var eventMonitor = getEventMonitor();
				final var event = eventMonitor.beginEntityInsertEvent();
				boolean success = false;
				try {
					persister.getInsertCoordinator().insert( entity, id, state, this );
					success = true;
				}
				catch (ConstraintViolationException cve) {

View on GitHub (pinned to fad1729dce)

Solutions

  1. Assign the identifier manually before calling insert(), or use an id generator that generates on insert (IDENTITY) instead of post-insert generators.
  2. For StatelessSession.insert with non-insert generators, set the id explicitly.

When it happens

Trigger: Thrown at hibernate-core/src/main/java/org/hibernate/internal/StatelessSessionImpl.java:417 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/2da6e1c7ff395995. Report an issue: GitHub.