我有一个名为Entry
的实体,它与另一个称为Image
的实体Many2Many有关。
Entry
和Image
关系如下所示:
@Entity('entry')
export class EntryEntity extends BaseEntity implements IDeserializable<EntryEntity> {
@ManyToMany(type => ImageEntity, image => image.entries, { onDelete: 'CASCADE', cascade: true })
@JoinTable()
images: ImageEntity[];
}
和Image
实体类:
@Entity('image')
export class ImageEntity extends BaseEntity implements IDeserializable<ImageEntity> {
@ManyToMany(type => EntryEntity, entry => entry.images)
entries: EntryEntity[];
}
我用于删除条目的方法:
public async delete(entryId: number): Promise<void> {
const queryRunner = this.connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
await queryRunner.manager.getRepository(EntryEntity)
.createQueryBuilder('entry')
.delete()
.from(EntryEntity)
.where('entry.id = :entryId', { entryId })
.execute();
await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
} finally {
await queryRunner.release();
}
}
预期行为:
如果我删除了某些条目,则其所有图像也应该删除。
实际行为:
条目从其表中删除,它也从entry_images_image
表中删除
但是与此条目关联的图像仍然存在(它们仍然存在于image
表中)。
我对TypeOrm不太熟悉,为什么会发生?我非常感谢您的帮助。
答案 0 :(得分:0)
级联所做的是删除双方的关系,而不是实体本身。因此,在您的情况下,您只会收到没有关系的图像,就像您提到的那样。
这样看:假设您有多个图像用于多个条目,并且它们彼此相连。如果删除一项,您是否真的希望图像实体被完全删除?因为在这种情况下,您将删除大量尚未删除的数据。