mysql - Typeorm infoga data även om det redan finns
Jag använder en node.js-backend med nest.js och typeorm för databasåtgärder. Jag hämtar en JSON med en lista av objekt som jag vill spara i en mySQL-databas. Denna databas kommer att uppdateras dagligen, men jag vill bara spara de data som inte redan finns i den tabellen. Jag trodde att repository.save() i typeorm gör detta redan, men det gör det inte.
save- Sparar en given entitet eller en array av entiteter. Om entiteten redan finns i databasen uppdateras den. Om entiteten inte finns i databasen, infogas den.
Kanske är det för att jag genererar en uuid-kolumn när jag sparar och TypeORM tror att det är ett annat objekt? Kan någon hjälpa mig med detta.
async writeNewEPG(epgData: EpgDataDTO[]){
const data = await this.epgDataRepository.create(epgData);
const response = await this.epgDataRepository.save(data);
return response;
}
Enhet :
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;
}
Svar #1
Jag stötte på detta problem tidigare; så jag brukar först kontrollera om objektet finns
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;
}
vilket verkar som att hårdkoda allt. Jag försökte också await Repository.updateOne(oldData) och ibland fick jag oväntade fel. Angelägen om att få reda på rätt svar.
