4

我正在尝试通过其中一个外键级联删除连接表中的行,并且它有另一个与之相关的表,我也想删除与此 ID 关联的所有行。所以它看起来像下面的图表。当我将 Session.delete(reqCandObject) 与 hibernate 一起使用时,它可以正常工作并通过从 Candidate_jobReq 表中删除 One 条目以及相关注释来级联。但是,我想删除所有具有特定候选 ID 的 Candidate_jobReq 条目(并删除评论)我尝试了下面的函数,但与好的 hibernate.delete(object) 函数不同,这个函数遇到了外键约束错误. 如何在让休眠级联删除的同时删除这些行?

在此处输入图像描述

public void deleteWhere(String selectionCase){
    Session hibernateSession = this.getSession();
    try {
        hibernateSession.beginTransaction();
        Query q = hibernateSession.createQuery("delete "+ type.getSimpleName() +" where " + selectionCase);
        q.executeUpdate();
        hibernateSession.getTransaction().commit();
    } finally {
        hibernateSession.close();
    }
}
4

1 回答 1

4

Hibernate 在内部处理级联。执行delete查询不会触发内部级联,这将导致不一致/孤儿。这您可能已经尝试过并面临外键约束错误。

有两种方法可以删除实体列表及其子实体:

  1. 使用 选择实体列表selectionCase。遍历列表并使用 . 单独删除每个列表session.delete
  2. 手动删除记录。编写单独的delete语句。为避免违反外键约束,您需要在删除父记录之前删除子记录。这将比第一个选项执行得更好。
于 2013-10-04T16:29:58.827 回答