У меня проблема JPA / Hibernate с отношением n: m (Project <-> Person) с таблицей соединений. Проект является владельцем картографии и имеет (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>();