使用TypeORM联查MainBranch与SubBranch表报错求助
解决TypeORM关联查询"unknown column"报错问题
错误原因分析
你的代码存在多处TypeORM关联配置与查询语法错误,导致SQL生成时出现未知列:
- 关联关系配置错误:
@OneToOne的反向引用参数指向了类属性而非实例属性;@JoinColumn参数格式不正确;反向关联未正确指向对方的关联属性 - 实体缺少主键:TypeORM要求每个实体必须定义主键,否则无法正确映射数据库表
- 查询语法错误:
relation应为复数relations;where条件中的branchname大小写与实体类属性branchName不匹配
修正后的实体类代码
MainBranch 实体类
import { Entity, PrimaryColumn, Column, OneToOne, JoinColumn } from "typeorm" import { SubBranch } from "./SubBranch" @Entity() export class MainBranch { // 将branchcode设为主键(根据业务场景调整,若branchcode是唯一业务标识) @PrimaryColumn() branchcode: string @Column() branchName: string @Column() branchContact: string // 修正@OneToOne反向引用,指向SubBranch的实例属性 @OneToOne(() => SubBranch, subBranch => subBranch.MainBrnachData) // 正确配置@JoinColumn,指定关联列映射 @JoinColumn({ name: "branchcode", referencedColumnName: "branchcode" }) SubData: SubBranch }
SubBranch 实体类
import { Entity, PrimaryColumn, Column, OneToOne } from "typeorm" import { MainBranch } from "./MainBranch" @Entity() export class SubBranch { @PrimaryColumn() branchcode: string @Column() subName: string @Column() subContact: string // 修正反向关联,指向MainBranch的SubData属性 @OneToOne(() => MainBranch, mainBranch => mainBranch.SubData) MainBrnachData: MainBranch }
修正后的查询代码
// 注意relations为复数,where条件属性名与实体类保持一致 const details = await this.mainBranchRepository.find({ relations: { SubData: true, }, where: { branchcode, branchName // 修正大小写,匹配实体类的branchName属性 } }) console.log(details)
额外说明
- 若
branchcode不是业务主键,可单独添加@PrimaryGeneratedColumn()生成自增主键,同时将branchcode设为@Column({ unique: true })保证唯一性 - 确保数据库中两张表的
branchcode列数据类型一致,且存在匹配的关联数据
内容的提问来源于stack exchange,提问作者user1187
相关产品推荐
相关产品推荐

