flowable/flowable-engine · error · FlowableObjectNotFoundException
No decision table found for id =
Error message
No decision table found for id = '<id>'
What it means
After validating the id, SetDecisionTableCategoryCmd looks up the decision table via DecisionEntityManager.findById. If no decision table exists for the given id it throws FlowableObjectNotFoundException with 'No decision table found for id = <id>'.
Solutions
- Verify the id exists: dmnRepositoryService.createDecisionTableQuery().decisionTableId(id).singleResult() before updating
- Confirm you are connected to the correct database/schema used at deployment time
- Re-check whether the deployment owning the decision table was deleted
Example fix
// before
repositoryService.setDecisionTableCategory(id, "cat"); // may throw not-found
// after
Decision d = repositoryService.createDecisionTableQuery().decisionTableId(id).singleResult();
if (d == null) throw new IllegalStateException("Unknown decision table: " + id);
repositoryService.setDecisionTableCategory(id, "cat"); Defensive patterns
Strategy: validation
Validate before calling
Decision d = repositoryService.createDecisionTableQuery().decisionTableId(id).singleResult();
if (d == null) throw new IllegalStateException("Decision table not found: " + id); Try / catch
try {
repositoryService.setDecisionTableCategory(id, category);
} catch (FlowableObjectNotFoundException e) {
log.error("Decision table missing: {}", id, e);
throw new IllegalStateException("Unknown decision table id", e);
} Prevention
- Verify existence with a query before updates
- Ensure the DMN engine points at the correct database/schema
- Beware cascade deletes removing the decision table with its deployment
When it happens
Trigger: Calling dmnRepositoryService.setDecisionTableCategory(id, category) where id is non-null but does not match any persisted decision table (never deployed, deleted, wrong engine/database).
Common situations: Typos in hardcoded ids, pointing at a different database/schema than the one the table was deployed to, the decision table being deleted by a cascade delete of its deployment, or mixing process-engine ids with DMN-engine ids.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- No deployment found for id =
- Cannot find case definition for id:
- Cannot find case definition with id
- case instance doesn't exist
- case instance doesn't exist
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/d262f669f6de336d.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/SetDecisionTableCategoryCmd.java:47
protected String decisionTableId;
protected String category;
public SetDecisionTableCategoryCmd(String decisionTableId, String category) {
this.decisionTableId = decisionTableId;
this.category = category;
}
@Override
public Void execute(CommandContext commandContext) {
if (decisionTableId == null) {
throw new FlowableIllegalArgumentException("Decision table id is null");
}
DecisionEntity decisionTable = CommandContextUtil.getDecisionEntityManager(commandContext).findById(decisionTableId);
if (decisionTable == null) {
throw new FlowableObjectNotFoundException("No decision table found for id = '" + decisionTableId + "'");
}
// Update category
decisionTable.setCategory(category);
// Remove process definition from cache, it will be refetch later
DeploymentCache<DecisionCacheEntry> decisionTableCache = CommandContextUtil.getDmnEngineConfiguration().getDefinitionCache();
if (decisionTableCache != null) {
decisionTableCache.remove(decisionTableId);
}
CommandContextUtil.getDecisionEntityManager(commandContext).update(decisionTable);
return null;
}
public String getDecisionTableId() {
return decisionTableId;
View on GitHub (pinned to d6d39ce1c6)