{"record":{"id":"399cf3f9fbee9383","repo":"hibernate/hibernate-orm","slug":"entity-s-did-not-define-a-natural-id","errorCode":null,"errorMessage":"Entity [%s] did not define a natural id","messagePattern":"Entity \\[(.+?)\\] did not define a natural id","errorType":"exception","errorClass":"HibernateException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java","lineNumber":55,"sourceCode":"public abstract class BaseNaturalIdLoadAccessImpl<T> implements NaturalIdLoadOptions {\n\tprivate final StatefulLoadAccessContext context;\n\tprivate final EntityMappingType entityDescriptor;\n\n\tprivate LockOptions lockOptions;\n\tprivate boolean synchronizationEnabled = true;\n\n\tprivate Set<String> enabledFetchProfiles;\n\tprivate Set<String> disabledFetchProfiles;\n\n\tprivate RootGraphImplementor<T> rootGraph;\n\tprivate GraphSemantic graphSemantic;\n\n\tprotected BaseNaturalIdLoadAccessImpl(StatefulLoadAccessContext context, EntityMappingType entityDescriptor) {\n\t\tthis.context = context;\n\t\tthis.entityDescriptor = entityDescriptor;\n\n\t\tif ( entityDescriptor.getNaturalIdMapping() == null ) {\n\t\t\tthrow new HibernateException(\n\t\t\t\t\tString.format( \"Entity [%s] did not define a natural id\", entityDescriptor.getEntityName() )\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic LockOptions getLockOptions() {\n\t\treturn lockOptions;\n\t}\n\n\tprotected Object with(LockMode lockMode, PessimisticLockScope lockScope) {\n\t\tif ( lockOptions == null ) {\n\t\t\tlockOptions = new LockOptions();\n\t\t}\n\t\tlockOptions.setLockMode( lockMode );\n\t\tlockOptions.setLockScope( lockScope );\n\t\treturn this;\n\t}\n","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java#L37-L73","documentation":"Error \"Entity [%s] did not define a natural id\" thrown in hibernate/hibernate-orm.","triggerScenarios":"Thrown at hibernate-core/src/main/java/org/hibernate/loader/internal/BaseNaturalIdLoadAccessImpl.java:55 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Map a natural id (@NaturalId) on the entity, or load by id instead of naturalId()."],"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"}