remove(Object entity)メソッドEntityManagerは、から取得したオブジェクトに対してのみ機能しますかfind()メソッド?
私は次のコードスニペットを持っています:
public void deletePerson() {
EntityManager em = getEntityManager();
Person p = new Person("x", "y", 200);
em.remove(p);
}
ただし、データベースから特定のエントリを削除するわけではありません。
以下のようなものを試したとき:
public void deletePerson() {
EntityManager em = getEntityManager();
Person p = em.find(Person.class, 200);
em.remove(p);
}
それはうまく機能しています。
JPAエンティティオブジェクトの削除に関するObjectDBのマニュアルから引用 :
オブジェクトをデータベースから削除するには、最初に(どちらの方法でも)取得する必要があり、次にアクティブなトランザクションでremoveメソッドを使用して削除できます。
引数がエンティティクラスのインスタンスでない場合、またはデタッチされたエンティティである場合、removeによってIllegalArgumentExceptionがスローされます。
new
演算子を使用してオブジェクトを作成すると、オブジェクトは分離されたエンティティになります。削除する場合は、永続化する必要があります。
エンティティを取得する場合、永続エンティティを取得しています。
その方向に何か。 EntityManager.remove は、管理対象エンティティに対してのみ機能します。これらの管理対象エンティティを取得する方法は重要ではありません。たとえば、次のようになります。
ただし、新しいオブジェクトは管理対象エンティティではないため、単に新しいオブジェクトを作成して削除しようとしても機能しません。また、エンティティはまだ切り離されるべきではありません。
エンティティの寿命は、すべて同じトランザクション内にあります(トランザクション外のエンティティは管理されません)。
Entity ent = new Entity(1); //entity is in new state, EntityManager never know
//anything about it
em.persist(ent); //entity is managed as long as not disconnected
//from EntityManager
em.clear(); // all previously managed entities, including ent, are now detached
Entity same = em.find(1); //managed same
em.remove(same); // entity is removed
はい、マージまたは削除操作の場合は、find()操作を使用してから、取得したエンティティでremoveメソッドを使用する必要があります。