hibernate/hibernate-orm · error · IllegalStateException

Could not resolve discriminator value

Error message

Could not resolve discriminator value

What it means

Error "Could not resolve discriminator value" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableDiscriminatorConverter.java:71

			String discriminatorName,
			JavaType<O> domainJavaType,
			JavaType<R> relationalJavaType,
			List<EmbeddableDiscriminatorValueDetailsImpl> valueMappings) {
		super( discriminatorName, domainJavaType, relationalJavaType );
		discriminatorValueToDetailsMap = new HashMap<>( valueMappings.size() );
		embeddableClassNameToDetailsMap = new HashMap<>( valueMappings.size() );
		valueMappings.forEach( valueDetails -> {
			discriminatorValueToDetailsMap.put( valueDetails.getValue(), valueDetails );
			embeddableClassNameToDetailsMap.put( valueDetails.getIndicatedEntityName(), valueDetails );
		} );
	}

	@Override
	public O toDomainValue(R relationalForm) {
		assert relationalForm == null || getRelationalJavaType().isInstance( relationalForm );
		final var matchingValueDetails = getDetailsForDiscriminatorValue( relationalForm );
		if ( matchingValueDetails == null ) {
			throw new IllegalStateException( "Could not resolve discriminator value" );
		}
		//noinspection unchecked
		return (O) matchingValueDetails.getEmbeddableClass();
	}

	@Override
	public EmbeddableDiscriminatorValueDetailsImpl getDetailsForDiscriminatorValue(Object relationalValue) {
		final var valueMatch = discriminatorValueToDetailsMap.get( relationalValue );
		if ( valueMatch != null ) {
			return valueMatch;
		}
		throw new HibernateException( "Unrecognized discriminator value: " + relationalValue );
	}

	@Override
	public DiscriminatorValueDetails getDetailsForEntityName(String embeddableClassName) {
		final var valueDetails = embeddableClassNameToDetailsMap.get( embeddableClassName );
		if ( valueDetails != null ) {

View on GitHub (pinned to fad1729dce)

Solutions

  1. Declare discriminator mappings for every embeddable subtype so the stored value can be resolved.
  2. Verify the embeddable discriminator column contains only declared values.

When it happens

Trigger: Thrown when an embeddable discriminator value from the result set cannot be resolved to a mapped embeddable subtype.

Common situations: See trigger scenarios.


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