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

