{"record":{"id":"548ea5981509216b","repo":"hibernate/hibernate-orm","slug":"entity-name-must-explicitly-specify-its-dis","errorCode":null,"errorMessage":"Entity '${name}' must explicitly specify its '@DiscriminatorValue'","messagePattern":"Entity '(.+?)' must explicitly specify its '@DiscriminatorValue'","errorType":"exception","errorClass":"MappingException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java","lineNumber":1816,"sourceCode":"\t}\n\n\tprivate void bindDiscriminatorValue() {\n\t\tfinal var discriminatorValue = annotatedClass.getAnnotationUsage( DiscriminatorValue.class, modelsContext() );\n\t\tpersistentClass.setDiscriminatorValue( discriminatorValueString( discriminatorValue ) );\n\t}\n\n\tprivate String discriminatorValueString(DiscriminatorValue discriminatorValue) {\n\t\tif ( discriminatorValue == null ) {\n\t\t\tfinal var discriminator = persistentClass.getDiscriminator();\n\t\t\tif ( discriminator == null ) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfinal String discriminatorTypeName = discriminator.getType().getName();\n\t\t\t\treturn switch ( discriminatorTypeName ) {\n\t\t\t\t\tcase \"string\" -> name; //Spec compliant\n\t\t\t\t\tcase \"integer\"-> String.valueOf( name.hashCode() ); // TODO: pretty nasty, should we just deprecate/disallow this?\n\t\t\t\t\tdefault -> throw new MappingException( \"Entity '\" + name + \"' must explicitly specify its '@DiscriminatorValue'\" );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn discriminatorValue.value();\n\t\t}\n\t}\n\n\tprivate void bindConcreteProxy() {\n\t\tfinal var concreteProxy = annotatedClass.getAnnotationUsage( ConcreteProxy.class, modelsContext() );\n\t\tif ( concreteProxy != null ) {\n\t\t\tif ( persistentClass.getSuperclass() != null ) {\n\t\t\t\tthrow new AnnotationException( \"Entity class '\" + persistentClass.getClassName()\n\t\t\t\t\t\t+  \"' is annotated '@ConcreteProxy' but it is not the root of the entity inheritance hierarchy\" );\n\t\t\t}\n\t\t\tpersistentClass.getRootClass().setConcreteProxy( true );\n\t\t}\n\t}","sourceCodeStart":1798,"sourceCodeEnd":1834,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java#L1798-L1834","documentation":"Error \"Entity '${name}' must explicitly specify its '@DiscriminatorValue'\" thrown in hibernate/hibernate-orm.","triggerScenarios":"A discriminator mapping is declared where the inheritance strategy does not allow it or is missing required values.","commonSituations":"@DiscriminatorColumn/@DiscriminatorFormula on non-root classes, JOINED hierarchies with @DiscriminatorFormula, or duplicate/missing @DiscriminatorValue declarations.","solutions":["Add an explicit @DiscriminatorValue to the entity."],"exampleFix":null,"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"}