当前位置: 首页 > 知识库问答 >
问题:

无法删除或更新父行:外键约束Hibernate失败

邬友樵
2023-03-14

我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题:

问题出在哪里?

@Entity
public class Package {
 @OneToOne(fetch = FetchType.EAGER)
  User sender;
  /*rest of class getter setter etc*/
}
@Entity
public class User {
  @oneToOne
  Person person;
 /*rest of user class*/
}
@Entity class Person {
  /*email etc*/
}

我想做什么?

我正在尝试删除package实体,但不删除package表中引用的用户

我正在通过packageDAO对package实体调用delete

@Override
public void remove(E entity) {
    try {
        transaction = currentSession().beginTransaction();
        if (transaction == null) {
            throw new GenericDAOException(TRANS_NULL);
        }
        currentSession().delete(entity);
        transaction.commit();

    } catch (final HibernateException he) {
        if (transaction != null) {
            // Transaction has to be rolled back when exception is thrown
            transaction.rollback();
        }
        throw new GenericDAOException(he.getCause().toString());
    }
    currentSession().close();
}

共有1个答案

东门新立
2023-03-14

您需要做的是首先删除包和用户的关系(将包中用户的fk设置为null)。您可以通过将包实体中的sender设置为null并更新它来实现这一点。一旦您这样做了,您就可以轻松地删除包实体而不删除用户实体。

 类似资料:
  • 我在这里使用了多对一双向关系,一旦我被放入数据库,我就不能删除文件,如果我试图删除,我会遇到异常,无法删除或更新父行:外键约束失败。 这是我的另一个实体类... 嗨这是我的完整栈迹

  • 问题内容: 进行时: 错误: 这是我的桌子: 问题答案: 照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个: …实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用: 纠正外键关系后,您的delete语句将起作用。

  • 问题内容: 我正在研究一个基本示例来测试操作,但出现异常。 我有以下实体: Employee.java EmpDetails.java 现在我在数据库中有员工ID为10的记录,在员工详细信息表中有相应的记录。 现在,当我在查询下面运行时: 我在想hibernate将删除员工记录和相应的员工详细信息记录,因为我已设置要删除的层叠类型。但我得到异常为: 引起原因:com.mysql.jdbc.exce

  • 我正在处理一个测试操作的基本示例,但我得到了异常。 我有以下实体: 有人能帮助我如何测试级联删除选项在这里吗?

  • 我正在做一个基本任务来移除级联任务,但我得到了一个例外。 类与类和类之间存在关系。 我有以下实体: 任务。JAVA 响应CheckLists.java 统计调查。JAVA 当我想删除从MySQL数据库如下(API REST): 然后我得到以下错误 无法删除或更新父行:外键约束失败(,约束外键()引用() hibernate查询: 编辑1: 我也有同样的问题 编辑2: 如何删除其及其子项? 非常感谢

  • 我将按id删除对象,但出现如下错误: com。mysql。jdbc。例外情况。jdbc4。MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(,constraint外键()引用) 我按id删除的方法是: 我的表的映射看起来像: Selection.java 作业Audit.java 审核组。JAVA AssignmentAudit