{"record":{"id":"726f2ea53e4a70b2","repo":"n8n-io/n8n","slug":"entity-entitymetadata-name-has-an-undefined-dis","errorCode":null,"errorMessage":"Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.","messagePattern":"Entity (.+?) has an undefined discriminator value\\. Discriminator value should be defined\\.","errorType":"exception","errorClass":"TypeORMError","httpStatus":null,"severity":"error","filePath":"packages/@n8n/typeorm/src/metadata-builder/EntityMetadataValidator.ts","lineNumber":81,"sourceCode":"\t\t\t\tthrow new TypeORMError(\n\t\t\t\t\t`Entity ${entityMetadata.name} has multiple primary columns with different constraint names. Constraint names should be the equal.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// validate if table is using inheritance it has a discriminator\n\t\t// also validate if discriminator values are not empty and not repeated\n\t\tif (\n\t\t\tentityMetadata.inheritancePattern === 'STI' ||\n\t\t\tentityMetadata.tableType === 'entity-child'\n\t\t) {\n\t\t\tif (!entityMetadata.discriminatorColumn)\n\t\t\t\tthrow new TypeORMError(\n\t\t\t\t\t`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`,\n\t\t\t\t);\n\n\t\t\tif (typeof entityMetadata.discriminatorValue === 'undefined')\n\t\t\t\tthrow new TypeORMError(\n\t\t\t\t\t`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`,\n\t\t\t\t);\n\n\t\t\tconst sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find((metadata) => {\n\t\t\t\treturn (\n\t\t\t\t\tmetadata !== entityMetadata &&\n\t\t\t\t\t(metadata.inheritancePattern === 'STI' || metadata.tableType === 'entity-child') &&\n\t\t\t\t\tmetadata.tableName === entityMetadata.tableName &&\n\t\t\t\t\tmetadata.discriminatorValue === entityMetadata.discriminatorValue &&\n\t\t\t\t\tmetadata.inheritanceTree.some(\n\t\t\t\t\t\t(parent) => entityMetadata.inheritanceTree.indexOf(parent) !== -1,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (sameDiscriminatorValueEntityMetadata)\n\t\t\t\tthrow new TypeORMError(\n\t\t\t\t\t`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`,\n\t\t\t\t);","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/typeorm/src/metadata-builder/EntityMetadataValidator.ts#L63-L99","documentation":"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.","triggerScenarios":"Marking a @ChildEntity without @DiscriminatorValue (and no default derived from the class name), or declaring @DiscriminatorColumn without specifying values for subclasses.","commonSituations":"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.","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)."],"exampleFix":"// before\n@ChildEntity()\nexport class Article extends Content {}\n\n// after\n@ChildEntity()\n@DiscriminatorValue('article')\nexport class Article extends Content {}","handlingStrategy":"validation","validationCode":"function assertStiDiscriminatorValuesDefined(dataSource: DataSource): string[] {\n  const problems: string[] = [];\n  for (const meta of dataSource.entityMetadatas) {\n    const isSti = meta.inheritancePattern === 'STI' || meta.tableType === 'entity-child';\n    if (isSti && typeof meta.discriminatorValue === 'undefined') {\n      problems.push(`${meta.targetName} has undefined discriminator value`);\n    }\n  }\n  return problems;\n}","typeGuard":null,"tryCatchPattern":"try {\n  await dataSource.initialize();\n} catch (err) {\n  if (err.message.includes('undefined discriminator value')) {\n    // add @DiscriminatorValue to the offending child entity\n  }\n  throw err;\n}","preventionTips":["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."],"tags":["single-table-inheritance","discriminator","metadata","startup"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}