我有一个教师表,它与测验表相连接。 1 名教师可以进行 N 个测验。
所以,我希望能够从数据库中删除教师。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
这些是教师和测验类(class)。我以为添加删除级联就能解决这个问题,但事实并非如此。
老师
@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;
}
}
测验
@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;
}
}
知道如何解决吗?我感谢所有的答案和建议。
编辑:嗯,我设法解决了这个问题,只是我在所有注释中有点迷失了。这是现在的工作版本。
老师
@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;
}
}
测验
@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;
}
}
最佳答案
父级:
@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(mappedBy = "teacher")
@Cascade(CascadeType.ALL)
public List<Quiz> getQuizList() {
return quizList;
}
public void setQuizList(List<Quiz> quizList) {
this.quizList = quizList;
}
}
child :
@Entity
public class Quiz {
private SimpleStringProperty name = new SimpleStringProperty();
private int quiz_id;
private List<Task> taskList;
@ManyToOne
@Cascade(CascadeType.ALL)
@JoinColumn(name="teacher_id", nullable = false)
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);
}
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;
}
}
应该对你有帮助。
关于java - 使用 hibernate 从数据库中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290528/