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
- 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.