Dmi*_*nin 8 typescript typeorm
我无法弄清楚是否是我,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;
}
Run Code Online (Sandbox Code Playgroud)
然后我就这么做了
await getRepository(Folder).delete(id);
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
update or delete on table "folder" violates foreign key constraint "FK_12606f83d18e5ae0c7e5693f3fb" on table
"segment"
Run Code Online (Sandbox Code Playgroud)
也尝试过做
const folder = await this.repository.findOneOrFail(id);
repository.remove(folder)
//or
folder.segments = null;
await this.repository.save(folder);
Run Code Online (Sandbox Code Playgroud)
还是报错...
我不想循环遍历所有子实体并手动删除它们。我认为cascade: true应该在保存或更新的同时处理它。也许语法应该不同?
谢谢!
Jud*_*dge 12
级联仅描述如何处理相关实体,当实体本身被删除时它没有效果。如果要在删除文件夹时删除所有段,则需要使用onDelete(这是数据库功能,否则则级联,这是在TypeORM内实现的。这意味着添加onDelete时需要生成并执行迁移)。所以这应该适合你:
@Entity()
export class Segment {
@PrimaryGeneratedColumn()
public readonly id: number;
@ManyToOne(() => Folder, (folder) => folder.segments, { onDelete: 'CASCADE' })
@JoinColumn()
public folder: Folder;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18203 次 |
| 最近记录: |