TypeORM与Oracle数据库多对多关联元数据错误求助
问题分析
你遇到的错误核心原因有两个:
@ManyToMany装饰器的反向关联参数写错了,应该指向对方实体上的关联属性,而非中间表实体;- 你的中间表
CASEWORKER_CASEWORKERGROUP包含额外字段TIME_STAMP,这种情况下不能直接使用 TypeORM 的简易多对多关联,必须通过中间表实体建立一对多/多对一的关联关系。
修正后的实体代码
CASEWORKER 实体
@Entity({ name: 'CASEWORKER' }) export class CASEWORKER { @PrimaryColumn() CASEWORKERID: string; @Column() CASEWORKERNAME: string; @Column() ISACTIVE: string; @Column() TIME_STAMP: Date; // 关联到中间表实体 @OneToMany(() => CASEWORKER_CASEWORKERGROUP, groupLink => groupLink.caseworker) caseworkerGroupLinks: CASEWORKER_CASEWORKERGROUP[]; }
CASEWORKERGROUP 实体
@Entity({ name: 'CASEWORKERGROUP' }) export class CASEWORKERGROUP { @PrimaryColumn() CASEWORKERGROUPID: string; @Column() CASEWORKERGROUPNAME: string; @Column() TIME_STAMP: Date; // 关联到中间表实体 @OneToMany(() => CASEWORKER_CASEWORKERGROUP, workerLink => workerLink.caseworkerGroup) caseworkerLinks: CASEWORKER_CASEWORKERGROUP[]; }
CASEWORKER_CASEWORKERGROUP 中间表实体
@Entity({ name: 'CASEWORKER_CASEWORKERGROUP' }) export class CASEWORKER_CASEWORKERGROUP { @PrimaryColumn() CASEWORKERID: string; @PrimaryColumn() CASEWORKERGROUPID: string; @Column() TIME_STAMP: Date; // 关联到 CASEWORKER 实体 @ManyToOne(() => CASEWORKER, caseworker => caseworker.caseworkerGroupLinks) @JoinColumn({ name: 'CASEWORKERID' }) caseworker: CASEWORKER; // 关联到 CASEWORKERGROUP 实体 @ManyToOne(() => CASEWORKERGROUP, group => group.caseworkerLinks) @JoinColumn({ name: 'CASEWORKERGROUPID' }) caseworkerGroup: CASEWORKERGROUP; }
补充说明
- 当中间表存在额外字段时,TypeORM 不支持直接使用
@ManyToMany+@JoinTable的方式,必须通过中间表实体来关联; - 修正后的代码通过
@OneToMany从主实体指向中间表,再通过@ManyToOne从中间表指向主实体,同时指定外键列名确保与数据库结构匹配; - 确保所有实体都已在 TypeORM 的连接配置中注册,避免出现元数据找不到的问题。
内容的提问来源于stack exchange,提问作者Qadeer Ashraf
相关产品推荐
相关产品推荐

