Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 无法删除或更新父行:外键约束无法休眠_Hibernate_Spring Mvc_Hibernate Mapping - Fatal编程技术网

Hibernate 无法删除或更新父行:外键约束无法休眠

Hibernate 无法删除或更新父行:外键约束无法休眠,hibernate,spring-mvc,hibernate-mapping,Hibernate,Spring Mvc,Hibernate Mapping,我仍然在hibernate中学习很多东西,并在hibernate中处理表之间的关系,因此在我的一个项目中,我面临以下问题: 有什么问题吗? 我有一个包类(它是一个实体类) 我有一个用户类(也是一个实体) 我想做什么? 我正在尝试删除包实体,而不删除包表中引用的用户 我通过packageDAO调用包实体上的delete @Override public void remove(E entity) { try { transaction = currentSession().

我仍然在hibernate中学习很多东西,并在hibernate中处理表之间的关系,因此在我的一个项目中,我面临以下问题:

有什么问题吗?

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

我有一个用户类(也是一个实体)

我想做什么?

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

我通过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\u table
,constraint
FK\u o5sy9ohe6iy6fqutl68hc3l
外键(
person\u id
)参考
人员表
人员id

到目前为止我所尝试的

我尝试的解决方案中很少有与这些帖子相匹配的,但我使用
cascade.ALL,cascade.DELETE无法达到预期的效果。实际上,在删除不属于我所寻找的软件包时,删除
也会删除用户,我提到的帖子中很少有包括:


如果你们中的任何人都能通过hibernate了解如何在不删除@OneTONE映射关系中的另一个实体的情况下删除一个实体,那就太好了。

您需要做的是首先删除包和用户的关系(将包中用户的fk设置为null)。您可以通过将包实体中的发件人设置为null并进行更新来完成此操作。完成此操作后,您可以轻松删除包实体而无需删除用户实体。

您需要做的是首先删除包和用户的关系(将包实体中用户的fk设置为null)。您可以通过将包实体中的发件人设置为空并进行更新来完成此操作。完成此操作后,您可以轻松删除包实体而无需删除用户实体。

此处已回答检查类似问题:此处已回答检查类似问题:
@Entity
public class User {
  @oneToOne
  Person person;
 /*rest of user class*/
}
@Entity class Person {
  /*email etc*/
}
@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();
}