我不知道是我本人,cascade: true
选项在删除父实体时不会删除子实体吗?
@Entity()
export class Folder {
@PrimaryGeneratedColumn()
public readonly id: number;
@OneToMany(() => Segment, (segment) => segment.folder, {
cascade: true,
})
public segments: Segment[];
}
@Entity()
export class Segment {
@PrimaryGeneratedColumn()
public readonly id: number;
@ManyToOne(() => Folder, (folder) => folder.segments)
@JoinColumn()
public folder: Folder;
}
然后我就
await getRepository(Folder).delete(id);
这给了我一个错误:
update or delete on table "folder" violates foreign key constraint "FK_12606f83d18e5ae0c7e5693f3fb" on table
"segment"
也尝试做
const folder = await this.repository.findOneOrFail(id);
repository.remove(folder)
//or
folder.segments = null;
await this.repository.save(folder);
仍然错误...
我不想遍历所有子实体并手动删除它们。我认为cascade: true
应该处理以及保存或更新。
也许语法应该不同?
谢谢!
答案 0 :(得分:1)
级联仅描述如何处理相关实体,删除实体本身不会产生任何影响。如果要在删除文件夹时删除所有段,则需要使用 onDelete (这是一项数据库功能,否则需要层叠,这是在TypeORM中实现的。这意味着您需要在以下情况下生成并执行迁移:添加onDelete)。所以这应该为您工作:
@Entity()
export class Segment {
@PrimaryGeneratedColumn()
public readonly id: number;
@ManyToOne(() => Folder, (folder) => folder.segments, { onDelete: 'CASCADE' })
@JoinColumn()
public folder: Folder;
}
答案 1 :(得分:1)
这是typeorm代码中的错误,我使用https://www.npmjs.com/package/patch-package修复了此问题,因为我需要尽快修复此问题
您需要使用以下代码修补node_modules/typeorm/persistence/subject-builder/OneToManySubjectBuilder.js
上的文件(-是要删除的文件,+是要添加的文件):
var removedRelatedEntitySubject = new Subject_1.Subject({
metadata: relation.inverseEntityMetadata,
parentSubject: subject,
- canBeUpdated: true,
+ canBeUpdated: !relation.isNullable,
+ mustBeRemoved: relation.isNullable,