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

TypeORM中@Generated()装饰器配置的自增字段无法自动生成求助

解决方案

问题根因

你现在的配置存在两个冲突问题:

  • @Generated('increment') 要求字段绑定PostgreSQL序列实现自增,但你同时在@Column中配置了静态默认值default: 2021,静态默认值优先级高于序列生成逻辑,会覆盖自增效果。
  • 现有配置不会自动为CD_TIPO_ENTREGA字段创建关联的自增序列,表结构中该字段是普通int类型,自然无法自动生成递增值。

修复方案

1. 调整实体字段注解

两种可行的注解写法二选一即可,推荐直接在@Column中完成所有配置,避免装饰器顺序导致的异常:

@Entity(TABLE_NAME)
class TiposEntrega {
  @PrimaryGeneratedColumn('uuid', { name: ID_TIPO_ENTREGA })
  id: string;

  // 写法1:直接在@Column内配置自增和序列参数
  @Column({ 
    type: 'int', 
    name: CD_TIPO_ENTREGA,
    generated: 'increment',
    sequence: {
      name: 'cd_tipo_entrega_seq',
      initialValue: 2021, // 自增起始值
      allocationSize: 1
    }
  })
  cdTipoEntrega: number;

  // 写法2:保留@Generated装饰器,移除静态default
  /*
  @Column({ 
    type: 'int', 
    name: CD_TIPO_ENTREGA
  })
  @Generated('increment')
  cdTipoEntrega: number;
  */
}

2. 配置自增起始值(可选,需要起始值为2021时操作)

如果选择上述写法2,没有显式配置sequence参数,可以在生成的迁移文件中,新增表结构的语句后追加序列重置逻辑:

ALTER SEQUENCE "TiposEntrega_CD_TIPO_ENTREGA_seq" RESTART WITH 2021;

注意:序列名默认规则为 {表名}_{列名}_seq,如果你的表有自定义前缀、大小写配置,需要对应调整序列名。

3. 生效操作

修改完配置后需要重新生成并执行迁移,删除原有CD_TIPO_ENTREGA字段重建,确保字段关联了自增序列。后续插入数据时不需要手动给cdTipoEntrega字段赋值,TypeORM会自动读取序列值回填。


内容的提问来源于stack exchange,提问作者Vinicius Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:03