hibernate/hibernate-orm · error · MappingException

@EnumeratedValue for EnumType.STRING must be placed on a fie

Error message

@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s

What it means

Error "@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s" thrown in hibernate/hibernate-orm.

Source

Thrown at hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java:480

	}

	private static <E extends Enum<E>> Field determineEnumeratedValueField(Class<? extends E> enumJavaTypeClass) {
		for ( var field : enumJavaTypeClass.getDeclaredFields() ) {
			if ( field.isAnnotationPresent( EnumeratedValue.class ) ) {
				return field;
			}
		}
		return null;
	}

	private static void validateEnumeratedValue(Field enumeratedValueField, JdbcTypeIndicators stdIndicators) {
		final Class<?> fieldType = enumeratedValueField.getType();
		if ( stdIndicators.getEnumeratedType() == EnumType.STRING ) {
			// JPA says only String is valid here
			// todo (7.0) : support char/Character as well
			if ( !String.class.equals( fieldType )
					&& !char.class.equals( fieldType ) ) {
				throw new MappingException(
						String.format(
								Locale.ROOT,
								"@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s",
								enumeratedValueField.getDeclaringClass().getName(),
								enumeratedValueField.getName()
						)
				);
			}
		}
		else {
			assert stdIndicators.getEnumeratedType() == null || stdIndicators.getEnumeratedType() == EnumType.ORDINAL;
			// JPA says only byte, short, or int are valid here
			if ( !byte.class.equals( fieldType )
					&& !short.class.equals( fieldType )
					&& !int.class.equals( fieldType ) ) {
				throw new MappingException(
						String.format(
								Locale.ROOT,

View on GitHub (pinned to fad1729dce)

Solutions

  1. Place @EnumeratedValue on a String (or char) field of the enum, or switch the mapping to EnumType.ORDINAL.

Example fix

Place @EnumeratedValue on a String (or char) field of the enum, or switch the mapping to EnumType.ORDINAL.

When it happens

Trigger: An entity mapping annotation or bootstrap configuration violates a Hibernate mapping rule.

Common situations: Annotation mapping mistakes: inverse-side @Id associations, @Column on @OneToOne, unmapped association targets, mismatched @EnumeratedValue/@Temporal usage, duplicate sequence generators.


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