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