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

NestJS+TypeORM枚举值无效:退款功能触发数据库枚举错误

问题排查方向

1. 数据库枚举类型未同步更新

  • 直接登录数据库,查看pagamento_statuspago_enum枚举是否包含estornado值,执行SQL命令:
    SELECT unnest(enum_range(NULL::pagamento_statuspago_enum));
    
  • 如果数据库中没有该值,说明TypeORM的迁移未执行或未生效,运行迁移命令同步:
    npm run typeorm:run-migrations
    

2. 枚举定义的大小写/拼写不一致

  • 检查代码中枚举的字符串值是否与数据库枚举完全匹配(数据库枚举区分大小写):
    export enum StatusPago {
      Pendente = 'pendente',
      Pago = 'pago',
      Estornado = 'estornado' // 确认此处字符串和数据库枚举值大小写、拼写完全一致
    }
    

3. TypeORM实体的枚举映射配置错误

  • 核对实体类中支付状态字段的装饰器配置,确保enumName与数据库枚举名完全匹配:
    @Column({
      type: 'enum',
      enum: StatusPago,
      name: 'statuspago',
      enumName: 'pagamento_statuspago_enum' // 必须和数据库中的枚举名称一致
    })
    statusPago: StatusPago;
    

4. 应用缓存或热重载导致枚举未更新

  • 关闭热重载并重启应用,避免旧枚举定义被缓存;若使用了Redis等全局缓存,清理缓存后重试。

5. 退款方法中的枚举值引用错误

  • 确认fazerReembolso方法中使用的是枚举常量而非手动拼写字符串:
    // 正确写法
    pagamento.statusPago = StatusPago.Estornado;
    // 错误写法(易引发拼写/大小写问题)
    pagamento.statusPago = 'estornado';
    

6. 数据库连接会话缓存旧元数据

  • 重启应用刷新数据库连接池,部分数据库可手动刷新元数据(如PostgreSQL执行RELOAD;)。

内容的提问来源于stack exchange,提问作者J. Maciel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:23:19