Typeorm 插入数据,即使它存在

Posted

技术标签:

【中文标题】Typeorm 插入数据,即使它存在【英文标题】:Typeorm insert data even if it exists 【发布时间】:2019-05-23 04:20:17 【问题描述】:

我正在使用带有nest.js 和typeorm 的node.js 后端来执行数据库操作。 我获取一个带有我想保存在 mysql 数据库中的对象列表的 JSON。该数据库将每天更新,但我只想保存该表中尚未包含的数据。我认为 typeorm 的repository.save() 已经这样做了,但事实并非如此。

save - 保存给定的实体或实体数组。如果实体已存在于数据库中,则对其进行更新。如果实体在数据库中不存在,则将其插入。

也许是因为我在保存时生成了一个 uuid 列,而打字员认为它是不同的项目?有人可以帮我解决这个问题吗?

async writeNewEPG(epgData: EpgDataDTO[])
    const data = await this.epgDataRepository.create(epgData);
    const response = await this.epgDataRepository.save(data);
    return response;

实体:

import  Entity, Column, PrimaryColumn, PrimaryGeneratedColumn  from 'typeorm';

@Entity('epg_data')
export class EpgDataEntity 

    @PrimaryColumn()
    @PrimaryGeneratedColumn('uuid')
    uuid: string;

    @Column(type: "text", nullable: true)
    sname: string;

    @Column(type: "text", nullable: true)
    title: string;

    @Column(type: "int", nullable: true)
    begin_timestamp: number;


【问题讨论】:

TypeORM upsert - create if not exist的可能重复 ***.com/questions/46745688/… 请查看上面的链接类型 ORM 保存(以完美的方式插入和更新工作)您需要遵循一些设置:像您的实体中的级联必须为真 【参考方案1】:

我以前遇到过这个问题;所以我通常会先检查项目是否存在

async writeNewEPG(epgData: EpgDataDTO[])
    let oldData = await this.epgDataRepository.find(epgData);
    if (oldDate) 
        ... update data entity ( oldData.sname = epgData.sname; etc)
     else 
        ... create new data entity ( oldData = new EpgDataEntity(); )
    
    const response = await this.epgDataRepository.save(oldData);
    return response;

这似乎对所有内容都进行了硬编码。 我也试过await Repository.updateOne(oldData),有时我会遇到意想不到的错误。 渴望找到正确的答案。

【讨论】:

以上是关于Typeorm 插入数据,即使它存在的主要内容,如果未能解决你的问题,请参考以下文章

TypeORM 插入与relationId

无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint

如何在 TypeORM 中使用具有自动递增 id 列的表进行级联插入

触发插入 - 防止插入重复 ID

即使它存在,我也无法从 mongodb 中检索值

DataTable update() 插入重复的新行而不检查它是不是存在