You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeORM执行delete操作时忽略@Column指定的字段名是什么原因?

问题原因
  • 核心触发原因是实体属性的注解配置错误:@PrimaryColumn本身是特殊的列注解,自带完整的列定义能力,优先级高于普通@Column注解。你对userId属性同时声明了两个列注解,且@PrimaryColumn写在@Column之后,也没有给@PrimaryColumn指定name映射规则,TypeORM会直接忽略前序@Column中配置的user_id列名,默认使用实体属性名userId作为数据库列名,最终生成了不符合预期的DELETE语句。
  • 次要排查方向:如果你的项目自定义了TypeORM的命名策略,也可能存在命名转换异常,但从你给出的代码片段来看,注解配置错误是首要诱因。
修复方案

删除冗余的@Column注解,直接将列名配置写入@PrimaryColumn即可,修改后的实体代码如下:

@Entity('table')
export class TableEntity implements Table {
  @PrimaryColumn({ name: 'user_id' })
  userId: number;
   ...
}

修改后再执行删除操作,生成的SQL就会正确使用user_id作为条件列。

注意:TypeORM中所有特殊列注解(@PrimaryColumn、@CreateDateColumn、@UpdateDateColumn等)都已经内置了普通@Column的全部能力,不需要额外叠加@Column注解,否则极易出现配置覆盖的异常问题。

内容的提问来源于stack exchange,提问作者Paulo Brito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 13:15:07