Typeorm вставлять данные, даже если они существуют - PullRequest
0 голосов
/ 23 декабря 2018

Я использую бэкэнд node.js с nest.js и typeorm для действий с базой данных.Я получаю JSON со списком объектов, которые я хочу сохранить в базе данных MySQL.Эта база данных будет обновляться ежедневно, но я просто хочу сохранить данные, которых еще нет в этой таблице.Я думал, что repository.save() typeorm уже делает это, но это не так.

save - Сохраняет данный объект или массив объектов.Если объект уже существует в базе данных, он обновляется.Если объект не существует в базе данных, он вставляется.

Может быть, это потому, что при сохранении я генерирую столбец uuid, а typorm считает его другим элементом?Может ли кто-нибудь помочь мне с этим.

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;

}

1 Ответ

0 голосов
/ 19 марта 2019

Я столкнулся с этой проблемой до;поэтому я обычно сначала проверяю, существует ли элемент

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), и иногда я получал неожиданные ошибки.Желая узнать правильный ответ.

...