Java 休眠:无法删除实体

Java 休眠:无法删除实体,java,hibernate,jpa,Java,Hibernate,Jpa,我正在尝试删除JPA/Hibernate配置中的实体。数据库是一个嵌入式HSQL文件 这是执行删除操作的代码: EntityManager em = PersistenceUtility.getInstance().createEntityManager(); EntityTransaction t = em.getTransaction(); t.begin(); List<ServiceTicket> ticket

我正在尝试删除JPA/Hibernate配置中的实体。数据库是一个嵌入式HSQL文件

这是执行删除操作的代码:

        EntityManager em = PersistenceUtility.getInstance().createEntityManager();
        EntityTransaction t = em.getTransaction();
        t.begin();

        List<ServiceTicket> tickets = em.createQuery("from ServiceTicket").getResultList();

        for (ServiceTicket ticket : tickets) {
            Report report = ticket.getReport();
            em.merge(report);
            em.merge(ticket);
            em.remove(report);
            em.remove(ticket);
        }

        em.flush();
        t.commit();

我做错了什么

提前感谢德国的问候

马可

你可以用

@OneToOne(cascade = CascadeType.REMOVE)
当您删除ServiceTicket时,它将删除报告

第二: 如果要删除某个值等于x的所有ServiceTicket,可以使用HQL:

Query query = session.createQuery("delete ServiceTicket where something = :x");
query.setParameter("x", "myvalue");
int result = query.executeUpdate();

一组注释:不需要合并实体,它们已经被管理了。还要记住,merge返回一个托管实体,但对作为参数传递的对象不做任何操作。不需要刷新,因为您在刷新后在行上提交更改。另一种(更简单的)方法是在报告中将ServiceTicket的映射声明为cascade=CascadeType.REMOVE(或ALL),并仅对报告调用em.REMOVE()。也许EntityManager有问题。有什么东西能用在这上面吗?(就像它在这个代码片段中找到报告一样?)(打开show sql)@MarcoNätlitz,没关系,你仍然可以使用HQL和CascadeType.Remove和EntityManager。我刚刚给你写了一个应该做什么的例子。只需使用EntityManager实现它。
Query query = session.createQuery("delete ServiceTicket where something = :x");
query.setParameter("x", "myvalue");
int result = query.executeUpdate();