java - 实体必须被管理才能调用 remove

标签 java jpa-2.0 eclipselink

这是怎么回事?

@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并再次尝试删除。

最佳答案

在您的情况下不需要合并,因为 ac 在 em.findem.remove 之间的任何点都没有分离。

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

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

关于java - 实体必须被管理才能调用 remove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338999/

相关文章:

java - Jasper 报告不显示图像

java - 多线程环境中缓存集合的无限循环

java - FileOutputStream(File,append)写入时不追加

java - 如何在JPA Criteria中做到这一点?

java - SAP HANA Cloud如何支持多个数据库?

java - 在 JPA 中映射 Map<Entity, Entity> 结果表中不存在于该描述符中

java - JPA Criteria API 中的订单

java - 是否可以从 AspectJ 编织中排除接口(interface)类

hibernate - 如何查询M :N relationship using enums with CriteriaBuilder

jpa - 通过三重联接表在每个 AddressType 的 Person 中定义多个 Address 属性