Typeorm 插入数据,即使它存在
Posted
技术标签:
【中文标题】Typeorm 插入数据,即使它存在【英文标题】:Typeorm insert data even if it exists 【发布时间】:2019-05-23 04:20:17 【问题描述】:我正在使用带有nest.js 和typeorm 的node.js 后端来执行数据库操作。
我获取一个带有我想保存在 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;
【问题讨论】:
TypeORM upsert - create if not exist的可能重复 ***.com/questions/46745688/… 请查看上面的链接类型 ORM 保存(以完美的方式插入和更新工作)您需要遵循一些设置:像您的实体中的级联必须为真 【参考方案1】:我以前遇到过这个问题;所以我通常会先检查项目是否存在
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)
,有时我会遇到意想不到的错误。
渴望找到正确的答案。
【讨论】:
以上是关于Typeorm 插入数据,即使它存在的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint