【问题标题】:Cannot delete or update a parent row: a foreign key constraint fails hibernate无法删除或更新父行:外键约束休眠失败
【发布时间】:2016-03-08 22:30:23
【问题描述】:

我仍然在 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*/
}

我想做什么?

我正在尝试删除包实体而不删除包表中引用的用户

我正在通过 packageDAO 对包实体调用 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();
}

我遇到了什么错误?

exception.GenericDAOException:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 无法删除或更新父行:外键约束失败 (mydb.user_table, CONSTRAINT FK_o0l5sy9ohe6iy6fqutl68hc3l FOREIGN KEY (@987654330 @) 引用 person_table (person_id))

到目前为止我所尝试的

我尝试过的解决方案很少与这些帖子匹配,但我无法达到预期的结果,使用cascade.ALL, cascade.DELETE 实际上也会删除用户,同时删除我不想要的包,很少有我提到的帖子已经包括:

@OneToMany errors in MySQL: Cannot delete or update a parent row: a foreign key constraint fails

Cannot delete or update a parent row: a foreign key constraint fails (hibernate xml mapping)

如果你们中的任何人都可以通过一些关于休眠的知识来了解如何删除一个实体而不删除 @OneToOne 映射关系中的另一个实体,那就太好了

【问题讨论】:

标签: hibernate spring-mvc hibernate-mapping


【解决方案1】:

您需要做的是首先删除Package和User的关系(将Package中User的fk设置为null)。您可以通过在Package实体中将sender设置为null并更新它。一旦你完成您可以轻松删除您的 Package 实体,而无需删除 User 实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2019-05-25
    • 2014-11-11
    • 2018-05-12
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多