单表继承模式下如何为父类实体指定鉴别器值?
解决TypeORM单表继承父类鉴别器枚举不匹配问题
问题原因
TypeORM单表继承中,父类实例的默认鉴别器值为类名字符串(如Document类对应值为"Document"),但你的枚举DocumentType中父类对应的有效值是大写的"DOCUMENT",导致插入时出现枚举值不匹配的报错。
解决方案
方法一:使用@DiscriminatorValue指定父类鉴别器值
在父类Document上添加@DiscriminatorValue装饰器,明确指定该类对应的鉴别器枚举值:
import { Entity, TableInheritance, Column, DiscriminatorValue } from "typeorm"; import { DocumentType } from "./DocumentType"; @Entity() @TableInheritance({ column: { type: 'varchar', name: 'documentType' } }) @DiscriminatorValue(DocumentType.DOCUMENT) // 指定父类对应的鉴别器值 export class Document { // ... 其他属性 @Column({ type: 'enum', enum: DocumentType }) documentType: DocumentType; // ... 其他属性 }
添加后,TypeORM插入Document实例时会自动使用DocumentType.DOCUMENT作为鉴别器值,与枚举定义完全匹配,解决报错问题。
方法二:设置字段默认值(备选)
如果不想使用@DiscriminatorValue,可以同时在@TableInheritance配置和documentType字段上指定枚举类型与默认值:
import { Entity, TableInheritance, Column } from "typeorm"; import { DocumentType } from "./DocumentType"; @Entity() @TableInheritance({ column: { type: 'enum', name: 'documentType', enum: DocumentType, default: DocumentType.DOCUMENT } }) export class Document { // ... 其他属性 @Column({ type: 'enum', enum: DocumentType, default: DocumentType.DOCUMENT }) documentType: DocumentType; // ... 其他属性 }
这种方式通过数据库字段默认值确保插入时的有效值,同时覆盖TypeORM的默认类名鉴别器逻辑。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

