必须管理实体才能调用删除

2022-09-04 01:10:48

这是怎么回事?

@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;
}

在呼叫我得到一个与消息是removeIllegalArgumentExceptionEntity must be managed to call remove: ...., try merging the detached and try the remove again.


答案 1

在你的情况下,不需要合并,因为 ac 在 em.find 和 em.remove 之间的任何点都不会断开连接。

通常,当实体解除附加时,EntityManager 的方法合并将实体作为参数并返回托管实例。作为参数给出的实体不会转换为附加。例如,这里对此进行了解释:EntityManager.merge。你必须去:

    AppointmentComment toBeRemoved = em.merge(ac);
    em.remove(toBeRemoved);

答案 2

试试这个:

entity = getEntityManager().getReference(AppointmentComment.class, entity.getId());
getEntityManager().remove(entity);

推荐