inf*_*dev 11 postgresql orm node.js typescript typeorm
我正在尝试使用 TypeORM删除file依赖于表的表上的记录fileDevice。
其实我得到这个错误
“更新或删除表“文件”违反表“文件设备”上的外键约束“FK_4dcd99898oij89898909c2603”
这是我声明表的方式:
export class File {
@PrimaryGeneratedColumn()
id: number;
@Column()
idFonc: number;
@Column()
version: number;
@Column('varchar', { length: 100 })
filename: string;
@Column({ nullable: true })
lastModified: Date;
@Column()
device: boolean;
@Column({ nullable: false })
typeId: number;
@ManyToOne(type => Type)
@JoinColumn({ referencedColumnName: 'id' })
type: Type;
@OneToMany(type => FileDevice, filedevice => filedevice.file)
fileDevice: Promise<FileDevice[]>;
}
Run Code Online (Sandbox Code Playgroud)
和文件设备
export class FileDevice {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(type => File, f => f.fileDevice, {
nullable: false,
onDelete: 'CASCADE',
})
file: File;
@Column('varchar', { length: 100 })
deviceid: string;
}
Run Code Online (Sandbox Code Playgroud)
使用 TypeORM 我删除了几个文件:
this.fileRepository.remove(filesListToDelete);
Run Code Online (Sandbox Code Playgroud)
我收到上面提到的错误。
我试图添加onDelete: 'CASCADE'到实体的定义中:
@OneToMany(type => FileDevice, filedevice => filedevice.file, {
onDelete: 'CASCADE',
})
fileDevice: Promise<FileDevice[]>;
Run Code Online (Sandbox Code Playgroud)
但我仍然有同样的错误。
我应该fileDevice先filesList 在file表上删除然后在表上删除吗?
我也遇到了类似的问题,在 typeorm 版本中0.2.45我通过在新生成的迁移文件中添加两行来修复它:
第一:删除约束:
await queryRunner.query(`ALTER TABLE "FileDevice" DROP CONSTRAINT "FK_4dcd99898oij89898909c2603"`);
Run Code Online (Sandbox Code Playgroud)
然后添加带有更新级联的约束:
await queryRunner.query(`ALTER TABLE "FileDevice" ADD CONSTRAINT "FK_4dcd99898oij89898909c2603" FOREIGN KEY ("fileId") REFERENCES "file"("id") ON DELETE CASCADE ON UPDATE CASCADE`);
Run Code Online (Sandbox Code Playgroud)
当您运行此迁移时,解决问题。
仅供参考:仅当您正确设置迁移时,此操作才有效,如果您使用迁移,只需在 DB shell 或查询工具上运行上述查询即可。
小智 2
如果迁移文件中FileDevice有的话,您需要添加这一点。迁移文件中非常需要注意。 onDelete: 'CASCADE'
foreignKeys: [
{
referencedTableName: 'file',
referencedColumnNames: ['id'],
columnNames: ['file'],
onDelete: 'CASCADE',
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4058 次 |
| 最近记录: |