hibernate/hibernate-orm · error · MappingException

Entity '${name}' must explicitly specify its '@Discriminator

Error message

Entity '${name}' must explicitly specify its '@DiscriminatorValue'

What it means

Error "Entity '${name}' must explicitly specify its '@DiscriminatorValue'" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java:1816

	}

	private void bindDiscriminatorValue() {
		final var discriminatorValue = annotatedClass.getAnnotationUsage( DiscriminatorValue.class, modelsContext() );
		persistentClass.setDiscriminatorValue( discriminatorValueString( discriminatorValue ) );
	}

	private String discriminatorValueString(DiscriminatorValue discriminatorValue) {
		if ( discriminatorValue == null ) {
			final var discriminator = persistentClass.getDiscriminator();
			if ( discriminator == null ) {
				return name;
			}
			else {
				final String discriminatorTypeName = discriminator.getType().getName();
				return switch ( discriminatorTypeName ) {
					case "string" -> name; //Spec compliant
					case "integer"-> String.valueOf( name.hashCode() ); // TODO: pretty nasty, should we just deprecate/disallow this?
					default -> throw new MappingException( "Entity '" + name + "' must explicitly specify its '@DiscriminatorValue'" );
				};
			}
		}
		else {
			return discriminatorValue.value();
		}
	}

	private void bindConcreteProxy() {
		final var concreteProxy = annotatedClass.getAnnotationUsage( ConcreteProxy.class, modelsContext() );
		if ( concreteProxy != null ) {
			if ( persistentClass.getSuperclass() != null ) {
				throw new AnnotationException( "Entity class '" + persistentClass.getClassName()
						+  "' is annotated '@ConcreteProxy' but it is not the root of the entity inheritance hierarchy" );
			}
			persistentClass.getRootClass().setConcreteProxy( true );
		}
	}

View on GitHub (pinned to fad1729dce)

Solutions

  1. Add an explicit @DiscriminatorValue to the entity.

When it happens

Trigger: A discriminator mapping is declared where the inheritance strategy does not allow it or is missing required values.

Common situations: @DiscriminatorColumn/@DiscriminatorFormula on non-root classes, JOINED hierarchies with @DiscriminatorFormula, or duplicate/missing @DiscriminatorValue declarations.


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