0
我想從我的數據庫中刪除測驗項目。該測驗包含任務對象的列表。Java的Hibernate的級聯刪除
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個任務。現在,如果我嘗試刪除測驗,只有最後一個任務會從數據庫中刪除,其他2依然存在。
任何想法,我怎麼能與級聯或類似的解決方案刪除所有3?