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

TypeORM自动覆盖自定义createdAt日期,如何禁用该自动生成功能?

解决TypeORM插入自定义createdAt日期被覆盖的问题

以下是几个排查和解决的关键点:

  • 关闭实体的自动时间戳配置
    检查你的Interaction实体类的@Entity装饰器是否开启了timestamps选项。如果设置了{ timestamps: true },TypeORM会自动为createdAt和updatedAt字段生成当前时间,覆盖你传入的值。需要将其改为false:

    @Entity({ timestamps: false })
    export class Interaction {
      // ...其他字段
      @Field(() => DateTimeScalar)
      @Column("timestamp without time zone",{})
      createdAt: Date;
    }
    
  • 修正日期对象的创建方式
    你当前的日期创建代码Date("2022-05-08 00:49:23").toIsoString()存在问题:直接调用Date()(不带new)返回的是字符串,而非Date对象。TypeORM的Date类型列需要接收Date对象,正确写法是:

    const createdDate = new Date("2022-05-08 00:49:23");
    

    无需额外调用toIsoString(),TypeORM会自动处理与数据库的格式适配。

  • 使用insert()代替save()执行插入
    Repository.save()方法会自动判断是插入新数据还是更新已有数据,可能触发一些隐性的字段自动填充逻辑。改用insert()方法执行纯插入操作,避免这类干扰:

    await getConnection().getRepository(Interaction).insert(interactions);
    
  • 确认列定义无隐性默认配置
    虽然你已确认数据库无now()默认值,但可以在@Column选项中明确禁用默认值,确保没有隐性配置生效:

    @Column("timestamp without time zone", { default: undefined })
    createdAt: Date;
    

内容的提问来源于stack exchange,提问作者Charles Semaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:04