0
データベースからQuizアイテムを削除しようとしています。クイズには、タスクオブジェクトのリストが含まれています。Java Hibernate deleteカスケード
public class Quiz {
private SimpleStringProperty name = new SimpleStringProperty();
private int quiz_id;
private Teacher teacherOwner;
private List<Task> taskList;
public Quiz() {
}
public Quiz(String name, Teacher teacherOwner) {
this.name.set(name);
this.teacherOwner = teacherOwner;
taskList = new ArrayList<>();
}
public Quiz(String name, Teacher teacherOwner, List<Task> taskList) {
this.name.set(name);
this.teacherOwner = teacherOwner;
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);
}
@OneToMany(targetEntity = Task.class, orphanRemoval = true, cascade = {javax.persistence.CascadeType.ALL})
public List<Task> getTaskList() {
return taskList;
}
public void setTaskList(List<Task> taskList) {
this.taskList = taskList;
}
@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;
}
@ManyToOne(targetEntity = Teacher.class)
public Teacher getTeacherOwner() {
return teacherOwner;
}
public void setTeacherOwner(Teacher teacherOwner) {
this.teacherOwner = teacherOwner;
}
}
@Entity
public class Task {
private SimpleStringProperty question = new SimpleStringProperty();
private Solution answer1, answer2, answer3, answer4;
private int task_id;
public Task(String question, Solution answer1, Solution answer2, Solution answer3, Solution answer4) {
this.question.set(question);
this.answer1 = answer1;
this.answer2 = answer2;
this.answer3 = answer3;
this.answer4 = answer4;
}
public Task() {}
@Column(nullable = false)
public String getQuestion() {
return question.get();
}
public SimpleStringProperty questionProperty() {
return question;
}
public void setQuestion(String question) {
this.question.set(question);
}
@OneToOne(targetEntity = Solution.class, cascade = {CascadeType.ALL})
public Solution getAnswer1() {
return answer1;
}
public void setAnswer1(Solution answer1) {
this.answer1 = answer1;
}
@OneToOne(targetEntity = Solution.class, cascade = {CascadeType.ALL})
public Solution getAnswer2() {
return answer2;
}
public void setAnswer2(Solution answer2) {
this.answer2 = answer2;
}
@OneToOne(targetEntity = Solution.class, cascade = {CascadeType.ALL})
public Solution getAnswer3() {
return answer3;
}
public void setAnswer3(Solution answer3) {
this.answer3 = answer3;
}
@OneToOne(targetEntity = Solution.class, cascade = {CascadeType.ALL})
public Solution getAnswer4() {
return answer4;
}
public void setAnswer4(Solution answer4) {
this.answer4 = answer4;
}
@Id
@GenericGenerator(name="id" , strategy="increment")
@GeneratedValue(generator="id")
public int getTask_id() {
return task_id;
}
public void setTask_id(int task_id) {
this.task_id = task_id;
}
}
次の方法でクイズを削除します。
public void deleteQuiz(Quiz q) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction transaction = session.beginTransaction();
session.delete(q);
transaction.commit();
}
私は自分のテーブルに3つのタスクを持つクイズを持っています。今、クイズを削除しようとすると、最後のタスクだけがDBから削除され、残りの2つは残ります。
カスケードなどの方法で3つをすべて削除するにはどうすればよいですか?