何が起きてる?
@Stateless
@LocalBean
public class AppointmentCommentDao {
public void delete(long appointmentCommentId) {
AppointmentComment ac = em.find(AppointmentComment.class, appointmentCommentId);
if (ac != null)
{
em.merge(ac);
em.remove(ac);
}
}
@PersistenceContext
private EntityManager em;
}
remove
を呼び出すと、IllegalArgumentException
が表示されます。メッセージはEntity must be managed to call remove: ...., try merging the detached and try the remove again.
あなたの場合、acはem.findとem.removeの間のどのポイントでも切り離されていないため、マージは必要ありません。
一般に、エンティティがデアタッチされると、EntityManagerのメソッドmergeはエンティティを引数として受け取り、マネージドインスタンスを返します。引数として指定されたエンティティは、アタッチされるように変換されません。これは、たとえばここで説明されています: EntityManager.merge 。あなたは行く必要があります:
AppointmentComment toBeRemoved = em.merge(ac);
em.remove(toBeRemoved);
これを試して:
entity = getEntityManager().getReference(AppointmentComment.class, entity.getId());
getEntityManager().remove(entity);