TypeORM查询报错:未知列'Test.computerIDComputerID'求助
解决TypeORM find() 查询时关联列重复拼接的错误
报错Unknown column 'Test.computerIDComputerID' in 'field list'是因为TypeORM生成SQL时错误重复拼接了关联列名,核心原因是实体关联装饰器的配置存在命名冲突或重复定义,以下是具体排查和修复步骤:
1. 检查Test实体的关联配置
重点看@ManyToOne/@OneToOne装饰器搭配@JoinColumn的写法:
错误场景1:重复指定关联列相关参数,导致命名重复拼接
// 错误写法 @ManyToOne(() => Computer) @JoinColumn({ name: "computerID", referencedColumnName: "computerID" }) computer: Computer;错误场景2:关联属性名与外键列名混淆,触发TypeORM自动拼接错误
正确写法(根据实际表结构调整):
// 情况1:Test表外键列是computerID,关联Computer的主键(默认取主键,无需显式指定) @ManyToOne(() => Computer) @JoinColumn({ name: "computerID" }) computer: Computer; // 情况2:显式指定关联Computer的某个列(比如主键是id) @ManyToOne(() => Computer) @JoinColumn({ name: "computerID", referencedColumnName: "id" }) computer: Computer;
2. 检查Computer实体的反向关联配置
如果Computer有@OneToMany关联Test,要确保关联的是Test实体中定义的关联属性名,而非外键列名:
- 错误写法:
@OneToMany(() => Test, test => test.computerID) // 错误引用外键列名 tests: Test[]; - 正确写法:
@OneToMany(() => Test, test => test.computer) // 引用Test中的关联属性computer tests: Test[];
3. 排查重复列定义
如果Test实体中同时定义了独立的外键列和关联属性,需确保两者正确绑定:
- 错误写法:
@Column() computerID: number; @ManyToOne(() => Computer) computer: Computer; // 未关联到已定义的computerID列 - 正确写法:
@Column() computerID: number; @ManyToOne(() => Computer) @JoinColumn({ name: "computerID" }) // 显式关联到已定义的列 computer: Computer;
修改配置后重新执行查询,查看生成的SQL是否已正确使用Test.computerID而非重复拼接的列名。
内容的提问来源于stack exchange,提问作者alexp
相关产品推荐
相关产品推荐

