移除和删除有什么区别?

What’s the difference between remove and delete?

比如我有一个TypeORM实体Profile:

@Entity()
class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

    @OneToOne(type => User, { cascade: true })
    @JoinColumn()
    user: User;
}

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

Profile.remove(profile)
Profile.delete(profile)

TypeORM 中的 removedelete 方法有什么区别?

来自 Repo:

  • remove - 删除给定的实体或实体数组。它在单个事务中删除所有给定的实体(在实体的情况下,管理器不是事务性的)。

示例:

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

示例:

await repository.delete(1);
await repository.delete([1, 2, 3]);
await repository.delete({ firstName: "Timber" });

如示例中所述here

import {getConnection} from "typeorm";

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

Which means you should use remove if it contains an array of Entities.

While you should use delete if you know the condition.


此外,@James stated in Entity Listener 例如 @BeforeRemove@AfterRemove 侦听器仅在使用 repository.remove 删除实体时触发。

类似地,@BeforeInsert@AfterInsert@BeforeUpdate@AfterUpdate仅在实体为inserted/updated时使用repository.save触发。

来源:Entity Listeners and Subscribers