У меня есть два класса (студенты и курсы), которые имеют отношения «многие ко многим». Экземпляры одного из них могут существовать без другого. Поэтому я удалил атрибут каскада в JPA-аннотации: @ManyToMany(cascade = CascadeType.ALL)
Когда я пытаюсь удалить студента, я получаю это сообщение об ошибке.
Что я делаю неправильно?
org.hibernate.exception.ConstraintViolationException: не удалось удалить: [com.Student#4]; вложенным исключением является javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: не удалось удалить: [com.Student#4]
Это Hibernate-выход:
Hibernate: удалить из студента, где id=? а версия=? 2011-09-19 15:25:10,317 [http-8080-3] ОШИБКА org.hibernate.util.JDBCExceptionReporter — невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не работает (
database
.student_course
, КОНСТРЕЙНТFKF8A06F72970A31AF
ВНЕШНИЙ КЛЮЧ (students
) ССЫЛКИstudents
(id
))
Это соответствующие части обоих классов:
@RooJavaBean
@RooToString
@RooEntity
public class Student{
@ManyToMany
private Set<Course> courses= new HashSet<Course>();
}
@RooJavaBean
@RooToString
@RooEntity
public class Course {
@ManyToMany(mappedBy = "courses")
private Set<Student> students= new HashSet<Student>();
}
Student
, вы определенно хотите обновитьSet
во всехCourse
, верно? Попробуйте восстановить каскад, но используяCascadeType.REMOVE
- person millhouse   schedule 20.09.2011