使用TypeOrm进行Postgres级联删除:对表“ table1”进行更新或删除违反了对表“ table2”的外键约束

时间:2018-12-04 10:24:41

标签: node.js postgresql typescript orm typeorm

我正在尝试使用TypeORM删除依赖于表file的{​​{1}}表上的记录。

实际上我收到此错误

  

“对表“文件”进行更新或删除违反了对表“文件设备”上的外键约束“ FK_4dcd99898oij89898909c2603””

这是我声明表的方式:

fileDevice

和fileDevice

export class File {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ nullable: false })
  idFonc: number;

  @Column({ nullable: false })
  version: number;

  @Column('varchar', { length: 100, nullable: false })
  filename: string;

  @Column({ nullable: true })
  lastModified: Date;

  @Column({ nullable: false })
  device: boolean;

  @Column({ nullable: false })
  typeId: number;

  @ManyToOne(type => Type, { nullable: false })
  @JoinColumn({ referencedColumnName: 'id' })
  type: Type;

  @OneToMany(type => FileDevice, filedevice => filedevice.file)
  fileDevice: FileDevice[];
}

使用TypeORM,我删除了几个文件:

export class FileDevice {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(type => File, f => f.fileDevice, {
    nullable: false,
    onDelete: 'CASCADE',
  })
  file: File;

  @Column('varchar', { length: 100, nullable: false })
  deviceid: string;
}

我收到上面提到的错误。

我尝试将this.fileRepository.remove(filesListToDelete); 添加到实体的定义中:

onDelete: 'CASCADE'

但是我仍然有同样的错误。

我应该首先在表@OneToMany(type => FileDevice, filedevice => filedevice.file, { onDelete: 'CASCADE', }) fileDevice: FileDevice[]; 上删除,然后在fileDevice表上删除filesList吗?

1 个答案:

答案 0 :(得分:0)

如果需要,请在FileDevice迁移文件中添加此文件。 注意 onDelete: 'CASCADE'在迁移文件中非常需要。

foreignKeys: [
                {
                    referencedTableName: 'file',
                    referencedColumnNames: ['id'],
                    columnNames: ['file'],
                    onDelete: 'CASCADE',

                }
]