首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TypeORM一次更新多条记录时如何忽略重复条目错误

使用TypeORM一次更新多条记录时如何忽略重复条目错误
EN

Stack Overflow用户
提问于 2022-10-20 17:07:36
回答 1查看 57关注 0票数 1

我正在尝试使用TypeORM库更新数百条数据库记录。问题是,在执行批量上载并停止整个操作时,有时会从SQL返回重复的错误。是否可以以这样的方式设置TypeORM,从而忽略重复条目并执行插入?该表使用两个主键:

这是我的insert命令(TypeORM + Nestjs):

代码语言:javascript
复制
  public async saveBulk(historicalPrices: IHistoricalPrice[]) {
    if (!historicalPrices.length) {
      return;
    }
    const repoPrices = historicalPrices.map((p) => this.historicalPricesRepository.create(p));
    await this.historicalPricesRepository.save(repoPrices, { chunk: 200 });
  }

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 06:58:08

您必须使用InsertQueryBuilder来保存实体,而不是repository.save方法。InsertQueryBuilder将允许您调用一个额外的方法orIgnore(),该方法将向mysql INSERT语句中添加IGNORE文字。mysql官方文档:

使用插入忽略时,对于包含不匹配值的行,插入操作将悄然失败,但插入匹配的行。

一个缺点--很明显,你现在必须把这些行分块在你自己身上。InsertQueryBuilder没有为实体块提供任何选项。您的代码应该如下所示:

代码语言:javascript
复制
for (let i = 0; i < historicalPrices.length; i += 200) {
  const chunk = historicalPrices.slice(i, i + 200);
  const targetEntity = this.historicalPricesRepository.target;
  await this.historicalPricesRepository
    .createQueryBuilder()
    .insert()
    .into(targetEntity)
    .values(chunk)
    .orIgnore()
    .execute();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74143751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档