我正在将node.js后端与nest.js和typeorm一起用于数据库操作。
我获取一个带有要保存在mySQL数据库中的对象列表的JSON。该数据库将每天更新,但我只想保存该表中尚未存在的数据。我以为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;
}
答案 0 :(得分:0)
我之前遇到过这个问题;所以我通常先检查项目是否存在
firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
似乎很难对所有内容进行编码。
我也尝试过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;
}
,有时会遇到意外错误。
渴望找到正确的答案。
答案 1 :(得分:0)
TypeORM upsert - create if not exist
请检查以上链接类型的ORM保存(以完美的方式插入和更新工作) 您需要遵循一些步骤: 像级联在您的实体中必须为真