{"record":{"id":"e8f94d6089352cce","repo":"flowable/flowable-engine","slug":"there-are-results-size-event-definitions-with-e8f94d","errorCode":null,"errorMessage":"There are ${results.size()} event definitions with key = '${eventDefinitionKey}' and version = '${eventVersion}'.","messagePattern":"There are (.+?) event definitions with key = '(.+?)' and version = '(.+?)'\\.","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/entity/data/impl/MybatisEventDefinitionDataManager.java","lineNumber":120,"sourceCode":"    public EventDefinitionEntity findEventDefinitionByDeploymentAndKeyAndTenantId(String deploymentId, String eventDefinitionKey, String tenantId) {\n        Map<String, Object> parameters = new HashMap<>();\n        parameters.put(\"deploymentId\", deploymentId);\n        parameters.put(\"eventDefinitionKey\", eventDefinitionKey);\n        parameters.put(\"tenantId\", tenantId);\n        return (EventDefinitionEntity) getDbSqlSession().selectOne(\"selectEventDefinitionByDeploymentAndKeyAndTenantId\", parameters);\n    }\n    \n    @Override\n    @SuppressWarnings(\"unchecked\")\n    public EventDefinitionEntity findEventDefinitionByKeyAndVersion(String eventDefinitionKey, Integer eventVersion) {\n        Map<String, Object> params = new HashMap<>();\n        params.put(\"eventDefinitionKey\", eventDefinitionKey);\n        params.put(\"eventVersion\", eventVersion);\n        List<EventDefinitionEntity> results = getDbSqlSession().selectList(\"selectEventDefinitionsByKeyAndVersion\", params);\n        if (results.size() == 1) {\n            return results.get(0);\n        } else if (results.size() > 1) {\n            throw new FlowableException(\"There are \" + results.size() + \" event definitions with key = '\" + eventDefinitionKey + \"' and version = '\" + eventVersion + \"'.\");\n        }\n        return null;\n    }\n\n    @Override\n    @SuppressWarnings(\"unchecked\")\n    public EventDefinitionEntity findEventDefinitionByKeyAndVersionAndTenantId(String eventDefinitionKey, Integer eventVersion, String tenantId) {\n        Map<String, Object> params = new HashMap<>();\n        params.put(\"eventDefinitionKey\", eventDefinitionKey);\n        params.put(\"eventVersion\", eventVersion);\n        params.put(\"tenantId\", tenantId);\n        List<EventDefinitionEntity> results = getDbSqlSession().selectList(\"selectEventDefinitionsByKeyAndVersionAndTenantId\", params);\n        if (results.size() == 1) {\n            return results.get(0);\n        } else if (results.size() > 1) {\n            throw new FlowableException(\"There are \" + results.size() + \" event definitions with key = '\" + eventDefinitionKey + \"' and version = '\" + eventVersion + \"' in tenant = '\" + tenantId + \"'.\");\n        }\n        return null;","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/entity/data/impl/MybatisEventDefinitionDataManager.java#L102-L138","documentation":"Thrown by MybatisEventDefinitionDataManager.findEventDefinitionByKeyAndVersion when selectEventDefinitionsByKeyAndVersion returns more than one EventDefinitionEntity for the same key and version. Event definition key+version is expected to be unique, so multiple rows signal duplicate persisted data. Deployment lookups relying on this method then fail with this FlowableException.","triggerScenarios":"Two or more FLW_EV_DATABASE_DEFINITION rows with identical KEY_ and VERSION_ — usually caused by concurrent deployments of the same event model on separate cluster nodes.","commonSituations":"Cluster nodes bootstrapping the same event definitions at the same time; missing unique index on (KEY_, VERSION_); migration scripts executed twice; retries re-inserting definitions after timeouts.","solutions":["Inspect and clean duplicates: SELECT * FROM FLW_EV_DATABASE_DEFINITION WHERE KEY_=? AND VERSION_=? and remove all but one row.","Serialize event model deployment across nodes (lock or leader-elected deployment on startup).","Add a unique database constraint on (KEY_, VERSION_) to prevent recurrence.","Keep the row whose DEPLOYMENT_ID_ still exists and delete orphans."],"exampleFix":"-- before (duplicate rows break lookups)\nSELECT ID_, DEPLOYMENT_ID_ FROM FLW_EV_DATABASE_DEFINITION WHERE KEY_='orderEvent' AND VERSION_=1;\n-- after: keep exactly one\nDELETE FROM FLW_EV_DATABASE_DEFINITION WHERE KEY_='orderEvent' AND VERSION_=1 AND ID_ != '<kept-id>';","handlingStrategy":"validation","validationCode":"long n = eventRepositoryService.createEventDefinitionQuery()\n    .eventDefinitionKey(key).eventDefinitionVersion(version).count();\nif (n > 1) throw new IllegalStateException(\"duplicate event definitions for key \" + key + \" v\" + version + \", clean DB before lookup\");","typeGuard":null,"tryCatchPattern":"try {\n    def = manager.findEventDefinitionByKeyAndVersion(key, version);\n} catch (FlowableException e) {\n    def = dedupeAndRetry(key, version); // delete extra rows, then retry\n}","preventionTips":["Add unique constraint on FLW_EV_DATABASE_DEFINITION (KEY_, VERSION_).","Deploy event models from a single node or under a distributed lock.","Make migration scripts idempotent so they cannot run twice.","Schedule periodic consistency checks for key/version uniqueness."],"tags":["flowable","event-definition","duplicate-data","database"],"backgroundTag":"database-query-failed","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}