Typeorm即使存在,也会插入数据

问题描述 投票:0回答:1

我正在使用带有nest.js的node.js后端和用于数据库操作的typeorm。我获取一个JSON,其中包含我想要保存在mySQL数据库中的对象列表。该数据库将每天更新,但我只想保存该表中尚未存在的数据。我认为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;

}
mysql node.js typescript nestjs typeorm
1个回答
0
投票

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

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),有时我会遇到意想不到的错误。渴望找到正确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.