web-dev-qa-db-ja.com

削除と削除の違いは何ですか?

たとえば、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のremoveメソッドとdeleteメソッドの違いは何ですか?

8
Yegor Zaremba

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();

つまり、エンティティの配列が含まれている場合は、removeを使用する必要があります。

条件がわかっている場合はdeleteを使用する必要があります。


さらに、@ JamescommentEntity Listenerなどのように@BeforeRemoveおよび@AfterRemoveリスナーは、repository.removeを使用してエンティティが削除されたときにのみトリガーされます。

同様に、@BeforeInsert@AfterInsert@BeforeUpdate@AfterUpdateは、repository.saveを使用してエンティティが挿入/更新されたときにのみトリガーされます。

ソース: エンティティリスナーとサブスクライバー

19
Mukyuu