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

时间:2015-12-04 04:04:32

标签: hibernate spring-mvc hibernate-mapping

我仍然在hibernate中学习很多东西并在hibernate中处理表之间的关系所以在我的一个项目中我遇到了以下问题:

有什么问题?

我有一个包类(它是一个实体类)

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

我有一个User类(它又是一个实体)

@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:无法删除或更新父行:外键约束失败(mydbuser_table,CONSTRAINT {{1} } FOREIGN KEY(FK_o0l5sy9ohe6iy6fqutl68hc3l)参考person_idperson_table))

到目前为止我尝试了什么

我试过的解决方案很少匹配这些帖子,但我无法达到预期的效果,使用person_id实际上会删除用户同时删除不是我要找的包,很少我所提到的帖子包括:

@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映射关系中的另一个实体的情况下删除一个实体,那将是很棒的

1 个答案:

答案 0 :(得分:0)

您需要做的是首先删除Package和User的关系(将Package中的User的fk设置为null)。您可以通过在Package实体中将p.uppercase { text-transform: uppercase; } 设置为null并更新它来执行此操作。您已完成,您可以轻松删除您的包实体而不删除用户实体。