hibernate/hibernate-orm · error · MappingException

Generator class '${className}' must implement either 'Before

Error message

Generator class '${className}' must implement either 'BeforeExecutionGenerator' or 'OnExecutionGenerator'

What it means

Error "Generator class '${className}' must implement either 'BeforeExecutionGenerator' or 'OnExecutionGenerator'" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/boot/model/internal/GeneratorBinder.java:354

		if ( BOOT_LOGGER.isTraceEnabled() ) {
			BOOT_LOGGER.addedSequenceGenerator( definitionBuilder.getName() );
		}
		return definitionBuilder.build();
	}

	private static IdentifierGeneratorDefinition buildTableIdGenerator(TableGenerator generatorAnnotation) {
		final var definitionBuilder = new IdentifierGeneratorDefinition.Builder();
		interpretTableGenerator( generatorAnnotation, definitionBuilder );
		if ( BOOT_LOGGER.isTraceEnabled() ) {
			BOOT_LOGGER.addedTableGenerator( definitionBuilder.getName() );
		}
		return definitionBuilder.build();
	}

	private static void checkGeneratorClass(Class<? extends Generator> generatorClass) {
		if ( !BeforeExecutionGenerator.class.isAssignableFrom( generatorClass )
				&& !OnExecutionGenerator.class.isAssignableFrom( generatorClass ) ) {
			throw new MappingException( "Generator class '" + generatorClass.getName()
					+ "' must implement either 'BeforeExecutionGenerator' or 'OnExecutionGenerator'" );
		}
	}

	private static void checkGeneratorInterfaces(Class<? extends Generator> generatorClass) {
		// A regular value generator should not implement legacy IdentifierGenerator
		if ( IdentifierGenerator.class.isAssignableFrom( generatorClass ) ) {
			throw new AnnotationException( "Generator class '" + generatorClass.getName()
					+ "' implements 'IdentifierGenerator' and may not be used with '@ValueGenerationType'" );
		}
	}

	/**
	 * Return a {@link GeneratorCreator} for an attribute annotated
	 * with a {@linkplain ValueGenerationType generator annotation}.
	 */
	private static <A extends Annotation> GeneratorCreator generatorCreator(
			MemberDetails memberDetails,

View on GitHub (pinned to fad1729dce)

Solutions

  1. Make the generator class implement BeforeExecutionGenerator or OnExecutionGenerator.

When it happens

Trigger: An identifier/value generator declaration is inconsistent with the referenced generator or the annotated element.

Common situations: @GeneratedValue pointing at a generator of the wrong kind (SEQUENCE vs TABLE), a missing named generator, too many generator annotations, or an unsupported generation strategy for @CollectionId.


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