typeorm即使存在也插入数据

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

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

  1. async writeNewEPG(epgData: EpgDataDTO[]){
  2. const data = await this.epgDataRepository.create(epgData);
  3. const response = await this.epgDataRepository.save(data);
  4. return response;
  5. }

实体:

  1. import { Entity, Column, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm';
  2. @Entity('epg_data')
  3. export class EpgDataEntity {
  4. @PrimaryColumn()
  5. @PrimaryGeneratedColumn('uuid')
  6. uuid: string;
  7. @Column({type: "text", nullable: true})
  8. sname: string;
  9. @Column({type: "text", nullable: true})
  10. title: string;
  11. @Column({type: "int", nullable: true})
  12. begin_timestamp: number;
  13. }
ztigrdn8

ztigrdn81#

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

  1. async writeNewEPG(epgData: EpgDataDTO[]){
  2. let oldData = await this.epgDataRepository.find(epgData);
  3. if (oldDate) {
  4. ... update data entity ( oldData.sname = epgData.sname; etc)
  5. } else {
  6. ... create new data entity ( oldData = new EpgDataEntity(); )
  7. }
  8. const response = await this.epgDataRepository.save(oldData);
  9. return response;
  10. }

好像什么都是硬编码。我也试过了 await Repository.updateOne(oldData) 有时我会犯意想不到的错误。急于找出正确答案。

相关问题