{"record":{"id":"068ebb41d3211d5f","repo":"flowable/flowable-engine","slug":"no-case-definition-found-for-key-casedefinition","errorCode":null,"errorMessage":"No case definition found for key '${caseDefinitionKey}'","messagePattern":"No case definition found for key '(.+?)'","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":404,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/AbstractCaseStartEventSubscriptionCmd.java","lineNumber":76,"sourceCode":"    protected void checkEventModelCorrelationParameter(EventModel eventModel, String correlationParameterName) {\n        Collection<EventPayload> correlationParameters = eventModel.getCorrelationParameters();\n        for (EventPayload correlationParameter : correlationParameters) {\n            if (correlationParameter.getName().equals(correlationParameterName)) {\n                return;\n            }\n        }\n        throw new FlowableIllegalArgumentException(\"There is no correlation parameter with name '\" + correlationParameterName + \"' defined in event model \"\n            + \"with key '\" + eventModel.getKey() + \"'. You can only subscribe for an event with a combination of valid correlation parameters.\");\n    }\n\n    protected CaseDefinition getLatestCaseDefinitionByKey(String caseDefinitionKey, String tenantId, CommandContext commandContext) {\n        CaseDefinitionEntityManager caseDefinitionEntityManager = CommandContextUtil.getCaseDefinitionEntityManager(commandContext);\n        CaseDefinition caseDefinition = null;\n        if (caseDefinitionKey != null && (tenantId == null || CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId))) {\n            caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);\n\n            if (caseDefinition == null) {\n                throw new FlowableObjectNotFoundException(\"No case definition found for key '\" + caseDefinitionKey + \"'\", CaseDefinition.class);\n            }\n\n        } else if (caseDefinitionKey != null && tenantId != null && !CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {\n\n            caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKeyAndTenantId(caseDefinitionKey, tenantId);\n\n            if (caseDefinition == null) {\n                CmmnEngineConfiguration caseEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext);\n                if (caseEngineConfiguration.isFallbackToDefaultTenant()) {\n                    String defaultTenant = caseEngineConfiguration.getDefaultTenantProvider().getDefaultTenant(tenantId, ScopeTypes.BPMN, caseDefinitionKey);\n                    if (StringUtils.isNotEmpty(defaultTenant)) {\n                        caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKeyAndTenantId(caseDefinitionKey, defaultTenant);\n                        \n                    } else {\n                        caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);\n                    }\n                    \n                    if (caseDefinition == null) {","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/AbstractCaseStartEventSubscriptionCmd.java#L58-L94","documentation":"FlowableObjectNotFoundException thrown by getLatestCaseDefinitionByKey when no case definition with the given key exists (querying without tenantId, or with NO_TENANT_ID). The command resolving the latest case definition for a start-event subscription cannot find any deployed definition for that key.","triggerScenarios":"getLatestCaseDefinitionByKey(caseDefinitionKey, null|NO_TENANT_ID, ctx) when caseDefinitionEntityManager.findLatestCaseDefinitionByKey(key) returns null — i.e., the case definition was never deployed or its key differs.","commonSituations":"Typo in the case definition key referenced in the CMMN plan model or client code; deployment never happened or was deleted; case definition deployed under a different key than the event registry start-event mapping expects.","solutions":["Verify the case definition key via the repository service case definition query and correct the key used.","Deploy the CMMN model containing the case definition before creating the subscription.","Check tenant handling: if multi-tenant, pass the correct tenantId so the tenant-aware lookup path is used."],"exampleFix":"// before\nruntimeService.createCaseInstanceBuilder().caseDefinitionKey(\"orderCase\").start(); // key is actually 'order-case'\n// after\nruntimeService.createCaseInstanceBuilder().caseDefinitionKey(\"order-case\").start();","handlingStrategy":"validation","validationCode":"boolean exists = cmmnRepositoryService.createCaseDefinitionQuery()\n    .caseDefinitionKey(key).count() > 0;\nif (!exists) throw new IllegalStateException(\"deploy case definition \" + key + \" first\");","typeGuard":null,"tryCatchPattern":"try { builder.caseDefinitionKey(key).start(); }\ncatch (FlowableObjectNotFoundException e) { if (e.getObjectClass() == CaseDefinition.class) { deployIfMissing(key); } }","preventionTips":["Deploy CMMN models in application startup before creating subscriptions or starting cases","Centralize case definition keys as constants shared with the model files"],"tags":["cmmn","case-definition","deployment"],"backgroundTag":"record-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}