I have a table Teachers which is joined with the table Quiz. 1 Teacher can have N Quizes.
So, I want to be able to delete a teacher from the database.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
These are the Teacher and Quiz classes. I thought adding a delete cascade would solve it, but it didn't.
Teacher
@Entity
public class Teacher extends User{
private List<Quiz> quizList;
public Teacher() {
}
public Teacher(String name, String surname, String nick, String password) {
super(name, surname, nick, password);
quizList = new ArrayList<>();
}
@OneToMany
@Cascade(value={CascadeType.REMOVE})
@JoinColumn(name = "quiz_id")
public List<Quiz> getQuizList() {
return quizList;
}
public void setQuizList(List<Quiz> quizList) {
this.quizList = quizList;
}
}
Quiz
@Entity
public class Quiz {
private SimpleStringProperty name = new SimpleStringProperty();
private int quiz_id;
private List<Task> taskList;
private Teacher owner;
public Quiz() {
}
public Quiz(String name, Teacher owner) {
this.name.set(name);
this.owner = owner;
taskList = new ArrayList<>();
}
public Quiz(String name, Teacher owner, List<Task> taskList) {
this.name.set(name);
this.owner = owner;
this.taskList = taskList;
}
@Column(nullable = false)
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
@ManyToOne
@JoinColumn(name = "teacher_id")
public Teacher getOwner() {
return owner;
}
public void setOwner(Teacher owner) {
this.owner = owner;
}
@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getQuiz_id() {
return quiz_id;
}
public void setQuiz_id(int quiz_id) {
this.quiz_id = quiz_id;
}
@OneToMany
public List<Task> getTasksList() {
return taskList;
}
public void setTasksList(List<Task> taskList) {
this.taskList = taskList;
}
}
Any idea how I could solve it? I appreciate all answers and suggestions.
EDIT: Well, I managed to solve it, I just got a bit lost in all my annotations. Here's the working version now.
Teacher
@Entity
public class Teacher extends User{
private List<Quiz> quizList;
public Teacher() {
}
public Teacher(String name, String surname, String nick, String password) {
super(name, surname, nick, password);
quizList = new ArrayList<>();
}
@OneToMany(orphanRemoval = true)
public List<Quiz> getQuizList() {
return quizList;
}
public void setQuizList(List<Quiz> quizList) {
this.quizList = quizList;
}
}
Quiz
@Entity
public class Quiz {
private SimpleStringProperty name = new SimpleStringProperty();
private int quiz_id;
private List<Task> taskList;
public Quiz() {
}
public Quiz(String name) {
this.name.set(name);
taskList = new ArrayList<>();
}
public Quiz(String name , List<Task> taskList) {
this.name.set(name);
this.taskList = taskList;
}
@Column(nullable = false)
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getQuiz_id() {
return quiz_id;
}
public void setQuiz_id(int quiz_id) {
this.quiz_id = quiz_id;
}
@OneToMany(orphanRemoval = true)
public List<Task> getTasksList() {
return taskList;
}
public void setTasksList(List<Task> taskList) {
this.taskList = taskList;
}
}