我仍然在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:无法删除或更新父行:外键约束失败(mydb
。user_table
,CONSTRAINT {{1} } FOREIGN KEY(FK_o0l5sy9ohe6iy6fqutl68hc3l
)参考person_id
(person_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映射关系中的另一个实体的情况下删除一个实体,那将是很棒的
答案 0 :(得分:0)
您需要做的是首先删除Package和User的关系(将Package中的User的fk设置为null)。您可以通过在Package实体中将p.uppercase {
text-transform: uppercase;
}
设置为null并更新它来执行此操作。您已完成,您可以轻松删除您的包实体而不删除用户实体。