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

无法删除或更新父行ConstraintViolationExc0019

司空思聪
2023-03-14

我有两个对象实体(用户和电话),它们应该有多对多关系。

使用者JAVA

//all columns

@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(name = "USER_PHONE",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "phone_id", referencedColumnName = "id"))
    private List<Phone> phones;

电话JAVA

//all columns
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(name = "USER_PHONE",
            joinColumns = @JoinColumn(name = "phone_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
    private List<User> userList;

现在,我在用户表中添加了两个ID为1和2的用户。然后,我添加一个id为1的手机,并将它们映射到两个用户id(1)

我的用户电话表如下所示:

Select * from USER_PHONE;
+----------+---------+
| phone_id | user_id |
+----------+---------+
|        1 |       1 |
|        1 |       2 |
+----------+---------+

现在,我想删除一个ID为2的用户。当我尝试这样做时,我得到了一个错误

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`dbname`.`USER_PHONE`, CONSTRAINT `FKC6A847DAFA96A429` FOREIGN KEY (`user_id`) REFERENCES `USER` (`ID`))

我的删除脚本

  String query = "DELETE User where id=?1";
        try{
            Query q = entityManager.createQuery(query);
            q.setParameter(1,id);
            q.executeUpdate();
            System.out.println(System.currentTimeMillis() + " DELETE: userId " + id + " ==> deleted");
        } catch(Exception e){
            e.printStackTrace();
            return false;
        }

知道我哪里出错了吗?非常感谢:)

共有2个答案

卓雅达
2023-03-14

进行以下更改。

//User class
@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.REMOVE}, fetch = FetchType.EAGER)
...
private List<Phone> phones;
闾丘鸣
2023-03-14

尝试使用entityManager。createNativeQuery()。您不能使用createQuery(),因为该表应该作为实体存在于Java代码中。此外,还需要使用确切的SQL格式。

String query=“从用户\电话中删除,其中用户\ id=?1”

    try{
        Query q = entityManager.createNativeQuery(query);
        q.setParameter(1,id);
        q.executeUpdate();
        System.out.println(System.currentTimeMillis() + " DELETE User_Phone: userId " + id + " ==> deleted");
    } catch(Exception e){
        e.printStackTrace();
        return false;
    }`

首先从USER_PHONE(使用createNativeQuery())删除行,然后从User(使用createQuery())删除行

 类似资料:
  • 我有父实体和一个方向作为具有关系的子实体。我尝试使用Hibernate查询删除超过一周的广告,但得到的结果是: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(.,constraint外键()引用() 用户: 筛选器: 广告: DAO删除方法:

  • 当我试图删除宠物时,我得到了这个错误。这个宠物,有访问(子),但我在宠物实体中定义了CASCADE. ALL。任何想法?错误:无法删除或更新父行:外键约束失败(。 访问类:

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

  • 我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete

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

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