typeorm即使存在也插入数据

t9eec4r0  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(701)

我将node.js后端与nest.js和typeorm一起用于数据库操作。我获取一个json,其中包含一个要保存在mysql数据库中的对象列表。这个数据库将每天更新,但我只想保存数据,这是不是已经在该表。我以为 repository.save() typeorm已经这么做了,但不是。 save -保存给定的实体或实体数组。如果实体已存在于数据库中,则会对其进行更新。如果该实体在数据库中不存在,则插入该实体。
可能是因为我在保存时生成了一个uuid列,并且输入了tyform,所以认为它是另一个项目?有人能帮我吗。

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;

}
ztigrdn8

ztigrdn81#

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

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) 有时我会犯意想不到的错误。急于找出正确答案。

相关问题