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

  1. Verify the id exists: dmnRepositoryService.createDecisionTableQuery().decisionTableId(id).singleResult() before updating
  2. Confirm you are connected to the correct database/schema used at deployment time
  3. 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

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


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)