次のエンティティがスローされ、削除時にエラーが発生します。
実在物:
@Entity
@NamedQueries({
})
public class Server {
//some attributes
}
次の操作を実行する非常に単純なJUnitテストを実行します。
- エンティティサーバーが作成されます
@Transactional パブリッククラスServerDao{ public Server update(Server entity、long userId){ entity.setDeleted(false); if(entity.getId()> 0){ if(userId> 0){ entity.setUpdated(new Date()); entity.setUpdatedby(usersDao.get(userId)); } em.merge(entity); } そうしないと { if(userId> 0){ entity.setInserted(new Date()); entity.setInsertedby(usersDao.get(userId)); } em.persist(entity); } 返品エンティティ; } }
エンティティサーバーが削除されます
...同じダオ
public void deleteHardJUnit(Server entity){ em.remove(entity); }
これにより、次のような例外がスローされます。
org.apache.openjpa.persistence.ArgumentException:デタッチされたオブジェクト「org.apache.openmeetings.persistence.beans.basic.Server-1」に対して操作deleteを実行できません。
削除方法を次のように変更した場合:
public void deleteHardJUnit(Server entity) {
if (entity.getId() > 0) {
em.refresh(entity);
em.remove(entity);
}
}
すべてが期待どおりに機能しているように見えます。例外はスローされず、レコードはデータベースから削除されます。
ただし、これが何を意味するのかわかりません。削除する前に、すべてのエンティティを本当に更新する必要がありますか?原因エンティティを更新する必要なしに、EntityManager.deleteを何度も使用しています。