{"record":{"id":"c1e43fb7bd2436ab","repo":"hibernate/hibernate-orm","slug":"enumeratedvalue-for-enumtype-string-must-be-place","errorCode":null,"errorMessage":"@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s","messagePattern":"@EnumeratedValue for EnumType\\.STRING must be placed on a field whose type is String or char: (.+?)\\.(.+?)","errorType":"exception","errorClass":"MappingException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java","lineNumber":480,"sourceCode":"\t}\n\n\tprivate static <E extends Enum<E>> Field determineEnumeratedValueField(Class<? extends E> enumJavaTypeClass) {\n\t\tfor ( var field : enumJavaTypeClass.getDeclaredFields() ) {\n\t\t\tif ( field.isAnnotationPresent( EnumeratedValue.class ) ) {\n\t\t\t\treturn field;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate static void validateEnumeratedValue(Field enumeratedValueField, JdbcTypeIndicators stdIndicators) {\n\t\tfinal Class<?> fieldType = enumeratedValueField.getType();\n\t\tif ( stdIndicators.getEnumeratedType() == EnumType.STRING ) {\n\t\t\t// JPA says only String is valid here\n\t\t\t// todo (7.0) : support char/Character as well\n\t\t\tif ( !String.class.equals( fieldType )\n\t\t\t\t\t&& !char.class.equals( fieldType ) ) {\n\t\t\t\tthrow new MappingException(\n\t\t\t\t\t\tString.format(\n\t\t\t\t\t\t\t\tLocale.ROOT,\n\t\t\t\t\t\t\t\t\"@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s\",\n\t\t\t\t\t\t\t\tenumeratedValueField.getDeclaringClass().getName(),\n\t\t\t\t\t\t\t\tenumeratedValueField.getName()\n\t\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tassert stdIndicators.getEnumeratedType() == null || stdIndicators.getEnumeratedType() == EnumType.ORDINAL;\n\t\t\t// JPA says only byte, short, or int are valid here\n\t\t\tif ( !byte.class.equals( fieldType )\n\t\t\t\t\t&& !short.class.equals( fieldType )\n\t\t\t\t\t&& !int.class.equals( fieldType ) ) {\n\t\t\t\tthrow new MappingException(\n\t\t\t\t\t\tString.format(\n\t\t\t\t\t\t\t\tLocale.ROOT,","sourceCodeStart":462,"sourceCodeEnd":498,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java#L462-L498","documentation":"Error \"@EnumeratedValue for EnumType.STRING must be placed on a field whose type is String or char: %s.%s\" thrown in hibernate/hibernate-orm.","triggerScenarios":"An entity mapping annotation or bootstrap configuration violates a Hibernate mapping rule.","commonSituations":"Annotation mapping mistakes: inverse-side @Id associations, @Column on @OneToOne, unmapped association targets, mismatched @EnumeratedValue/@Temporal usage, duplicate sequence generators.","solutions":["Place @EnumeratedValue on a String (or char) field of the enum, or switch the mapping to EnumType.ORDINAL."],"exampleFix":"Place @EnumeratedValue on a String (or char) field of the enum, or switch the mapping to EnumType.ORDINAL.","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}