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
相关产品推荐
相关产品推荐

