我有兩個有多對多關係的類(學生和課程)。 它們的實例可以在沒有其他實例的情況下存在。 因此,我刪除了JPA註釋中的級聯屬性:@ManyToMany(cascade = CascadeType.ALL)使用MANY_TO_MANY關係刪除對象的一個實例,沒有級聯失敗
一旦我嘗試刪除學生,我會收到此錯誤消息。
我在做什麼錯?
org.hibernate.exception.ConstraintViolationException:無法 刪除:[com.Student#4];嵌套的異常是 javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException:無法 刪除:[com.Student#4]
這是休眠輸出:
休眠:刪除學生在哪裏id =?和版本=? 2011-09-19 15:25:10317 [HTTP-8080-3] ERROR org.hibernate.util.JDBCExceptionReporter - 不能刪除或更新 父行:外鍵約束失敗 (
database
student_course
,約束FKF8A06F72970A31AF
外國 KEY(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>();
}
您的意圖是什麼?如果你是_deleting_「學生」,你一定希望所有課程中的「Set」都被更新,對嗎?嘗試恢復級聯,但使用'CascadeType.REMOVE' – millhouse
您可以在刪除學生之前嘗試清除課程集合。我不認爲級聯會在這裏幫助 - 級聯是刪除學生時刪除課程。你的情況是什麼導致問題是映射表中的行。 – gkamal