gpt4 book ai didi

mysql - 无法删除或更新父行 ConstraintViolationException

转载 作者:行者123 更新时间:2023-11-29 11:10:37 25 4
gpt4 key购买 nike

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

User.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;

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

我的 USER_PHONE 表如下所示:

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;
}

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

最佳答案

尝试使用entityManager.createNativeQuery()。您不能使用createQuery(),因为表应该作为 Java 代码中的实体出现。另外,您需要使用精确的 SQL 格式。

字符串查询 = "DELETE FROM USER_PHONE WHERE user_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())

关于mysql - 无法删除或更新父行 ConstraintViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com