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 Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01