Cannot delete or update a parent row ConstraintViolationException(无法删除或更新父行 ConstraintViolationException)
问题描述
我有 2 个对象实体(用户和电话),它们应该具有多对多关系.
I have 2 object entities (User and Phone) and they are supposed to have many-to-many relations.
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;
Phone.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 表中添加了 2 个 ID 分别为 1 和 2 的用户.然后,我添加一个 id 为 1 的电话并将它们映射到两个用户 IDs(1&2) .
Now, I add 2 users with IDs 1 and 2 in my USER table. Then, I add a single phone with id 1 and map them to both the user IDs(1&2) .
我的 USER_PHONE 表如下所示:
My USER_PHONE table looks as below:
Select * from USER_PHONE;
+----------+---------+
| phone_id | user_id |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
+----------+---------+
现在,我希望删除 ID 为 2 的用户.当我尝试这样做时,我得到一个错误
Now, I wish to remove a user with ID 2. When I try to do this, I get an error
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;
}
知道我哪里出错了吗?非常感谢:)
Any idea where am I going wrong ? Thanks a lot :)
推荐答案
尝试使用 entityManager.createNativeQuery().您不能使用 createQuery(),因为该表应该作为一个实体出现在您的 Java 代码中.此外,您需要使用准确的 SQL 格式.
Try using entityManager.createNativeQuery(). You cannot use createQuery() because the table should be present as an entity in your Java code. Also, you need to use the exact SQL format.
String query = "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()代码>)
First delete the row from USER_PHONE (using createNativeQuery()), and then from User (using createQuery())
这篇关于无法删除或更新父行 ConstraintViolationException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法删除或更新父行 ConstraintViolationException
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- SQL 临时表问题 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
