gpt4 book ai didi

java - JPA/Hibernate - 删除元素时出现 ConstraintViolationException

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:05 30 4
gpt4 key购买 nike

我遇到了带有连接表的 n:m 关系(项目 <-> 人员)的 JPA/Hibernate 问题。该项目是映射所有者并具有 (cascade = CascadeType.ALL)。

现在我想删除与 Person 关联的项目,因此 Project_Person 连接表中有一个条目,但我得到了

org.hibernate.exception.ConstraintViolationException:无法执行 JDBC 批量更新

因为在删除项目之前未删除 Project_Person 表的条目。

这是removeProject方法:

public void removeProject(int projectId){
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session sess = sessionFactory.getCurrentSession();
Transaction tx = sess.beginTransaction();
try {
Project p = (Project)sess.createQuery("from Project where id = "+projectId).list().get(0);
sess.delete(p);
tx.commit();
}
catch (IndexOutOfBoundsException ex) {System.out.println("exception: "+ex);}
}

一切都在事务内部,所以没有问题。但是为什么 sess.selete(p) 不会自动从连接表中删除该条目?

有人知道吗?最好的问候蒂姆。

更新:

Person.java:

@ManyToMany(mappedBy="persons")
private Set<Project> projects = new HashSet<Project>();

Project.java:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Project_Person",
joinColumns = {@JoinColumn(name="project_id", referencedColumnName="id")},
inverseJoinColumns = {@JoinColumn(name="person_id", referencedColumnName="id")}
)
private Set<Person> persons = new HashSet<Person>();

最佳答案

我可以回答我的问题:我需要将人员设置为空:

p.setPersons(null);

一切都很好。

关于java - JPA/Hibernate - 删除元素时出现 ConstraintViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940995/

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