java - 使用 hibernate 从数据库中删除项目

标签 java hibernate

我有一个教师表,它与测验表相连接。 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/

相关文章:

java - gradle checkstyle 只是输出温暖,但构建成功

java - 我在 DAO 中为具体查询创建 AsynchTask 时遇到问题

sql-server - Hibernate4,Grails 2.5-缓存的数据在两次重启之间仍然存在吗?

java - Hibernate 在双向映射中不生成键

java - Hibernate 模板更新 hql 中不断出现错误

java - 在 Java Swing 中为特定组件设置 Tooltip 延迟时间

java - 如何在 Java 中将 ArrayList 添加到 Hashmap

java - 无法轻松注入(inject) CDI Bean

java - org.hibernate.LazyInitializationException 关联集合

hibernate - JPA/hibernate : select currval on non existing sequence/relation