删除和删除有什么区别?

Yeg*_*mba 6 typescript typeorm

例如,我有一个TypeORM实体Profile

@Entity()
class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

    @OneToOne(type => User, { cascade: true })
    @JoinColumn()
    user: User;
}
Run Code Online (Sandbox Code Playgroud)

我不确定应该使用哪一个删除用户个人资料?

Profile.remove(profile)
Profile.delete(profile)
Run Code Online (Sandbox Code Playgroud)

TypeORM中removedelete方法之间有什么区别?

Muk*_*yuu 15

回购

  • remove-删除给定的实体或实体数组。它会在一次交易中删除所有给定的实体(对于实体而言,经理不是交易性的)。

例:

await repository.remove(user);
await repository.remove([
    category1,
    category2,
    category3
]);
Run Code Online (Sandbox Code Playgroud)
  • delete -按实体ID,ID或给定条件删除实体:

例:

await repository.delete(1);
await repository.delete([1, 2, 3]);
await repository.delete({ firstName: "Timber" });
Run Code Online (Sandbox Code Playgroud)

作为例子说明这里

import {getConnection} from "typeorm";

await getConnection()
    .createQueryBuilder()
    .delete()
    .from(User)
    .where("id = :id", { id: 1 })
    .execute();
Run Code Online (Sandbox Code Playgroud)

这意味着remove如果它包含实体数组,则应使用。

delete如果您知道病情,则应该使用。


此外,正如@ James在诸如和中所述的注释中 所述,仅当使用删除实体时才触发监听器。Entity Listener@BeforeRemove@AfterRemoverepository.remove

同样,@BeforeInsert@AfterInsert@BeforeUpdate@AfterUpdate只有当实体插入/使用更新的触发repository.save

来源:实体侦听器和订户

  • 还要注意,`repository.delete`不会触发`@ Before / After Remove`监听器,只有`repository.remove`会触发。同样,`repository.update`不会触发@@ Before / After Update侦听器,只有`repository.save`会触发。 (4认同)