Каскадное удаление Postgres с использованием TypeOrm: обновление или удаление в таблице «table1» нарушает ограничение внешнего ключа для таблицы «table2» - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь удалить записи в таблице file, которая зависит от таблицы fileDevice, используя TypeORM.

На самом деле я получаю эту ошибку

"обновить или удалитьдля таблицы "file" нарушается ограничение внешнего ключа "FK_4dcd99898oij89898909c2603" для таблицы "file_device" "

Вот как я объявляю таблицы:

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[];
}

И fileDevice

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;
}

с помощью TypeORM я удаляю несколько файлов:

this.fileRepository.remove(filesListToDelete);

Я получаю ошибку, упомянутую выше.

Я попытался добавить onDelete: 'CASCADE' в определение сущности:

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

Но у меня все та же ошибка.

Должен ли я сначала удалить таблицу fileDevice, а затем удалить filesList на file таблицу?

1 Ответ

0 голосов
/ 09 апреля 2019

В файле миграции FileDevice, если он есть, вам нужно добавить это. Примечание. * * * * * * * * * * * * * * * * * * * * * onDelete: 'CASCADE' * * * * * * * *1004*.

...