n8n-io/n8n · error · TypeORMError
Entity ${entityMetadata.name} has an undefined discriminator
Error message
Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined. What it means
Thrown by EntityMetadataValidator.validate in the STI branch when a discriminator column exists but discriminatorValue is undefined. Each STI participant (root and every child) must declare its discriminator value via @DiscriminatorValue or the class name default; an undefined value means TypeORM cannot persist or hydrate the row correctly.
Source
Thrown at packages/@n8n/typeorm/src/metadata-builder/EntityMetadataValidator.ts:81
throw new TypeORMError(
`Entity ${entityMetadata.name} has multiple primary columns with different constraint names. Constraint names should be the equal.`,
);
}
}
// validate if table is using inheritance it has a discriminator
// also validate if discriminator values are not empty and not repeated
if (
entityMetadata.inheritancePattern === 'STI' ||
entityMetadata.tableType === 'entity-child'
) {
if (!entityMetadata.discriminatorColumn)
throw new TypeORMError(
`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`,
);
if (typeof entityMetadata.discriminatorValue === 'undefined')
throw new TypeORMError(
`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`,
);
const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find((metadata) => {
return (
metadata !== entityMetadata &&
(metadata.inheritancePattern === 'STI' || metadata.tableType === 'entity-child') &&
metadata.tableName === entityMetadata.tableName &&
metadata.discriminatorValue === entityMetadata.discriminatorValue &&
metadata.inheritanceTree.some(
(parent) => entityMetadata.inheritanceTree.indexOf(parent) !== -1,
)
);
});
if (sameDiscriminatorValueEntityMetadata)
throw new TypeORMError(
`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`,
);View on GitHub (pinned to 5ac6606e81)
Solutions
- Add @DiscriminatorValue('article') (or another unique literal) to each child entity.
- Ensure the root entity also has a discriminator value if it can be instantiated.
- Keep discriminator values unique across siblings (the next validator check enforces this).
Example fix
// before
@ChildEntity()
export class Article extends Content {}
// after
@ChildEntity()
@DiscriminatorValue('article')
export class Article extends Content {} Defensive patterns
Strategy: validation
Validate before calling
function assertStiDiscriminatorValuesDefined(dataSource: DataSource): string[] {
const problems: string[] = [];
for (const meta of dataSource.entityMetadatas) {
const isSti = meta.inheritancePattern === 'STI' || meta.tableType === 'entity-child';
if (isSti && typeof meta.discriminatorValue === 'undefined') {
problems.push(`${meta.targetName} has undefined discriminator value`);
}
}
return problems;
} Try / catch
try {
await dataSource.initialize();
} catch (err) {
if (err.message.includes('undefined discriminator value')) {
// add @DiscriminatorValue to the offending child entity
}
throw err;
} Prevention
- Add @DiscriminatorValue to every @ChildEntity at the moment the decorator is introduced.
- Run the post-init discriminator-value validator in CI.
- Keep a registry of discriminator values per STI tree to make gaps visible.
When it happens
Trigger: Marking a @ChildEntity without @DiscriminatorValue (and no default derived from the class name), or declaring @DiscriminatorColumn without specifying values for subclasses.
Common situations: Adding a new child entity to an STI tree and forgetting its discriminator value; relying on default-name behavior that was changed by a refactor.
Related errors
- Entity ${entityMetadata.name} using single-table inheritance
- Entities ${entityMetadata.name} and ${sameDiscriminatorValue
- Index ${indexName}contains column that is missing in the ent
- Cannot find relation ${propertyPath}. Wrong relation specifi
- Cannot find relation ${propertyPath}. Wrong relation specifi
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/726f2ea53e4a70b2.
Report an issue: GitHub.