Hibernate проблема с инструкцией удалить - PullRequest
1 голос
/ 21 января 2011

У меня есть prbolem с hibernate entitymanager и, в частности, с инструкцией remove.

Я пытаюсь удалить сущность из БД, но система возвращает эту ошибку.

ERROR [JDBCExceptionReporter] Cannot delete or update a parent row: a foreign key constraint fails (`datalesson`.`coursematerial_lecture`, CONSTRAINT `FK2471D4A14EC7B08F` FOREIGN KEY (`lectures_id`) REFERENCES `lecture` (`id`))

Линейный код, который генерирует эту ошибку:

private static CleanDatabaseSystemRemote cdsr;
cdsr = (CleanDatabaseSystemRemote) ctx.lookup("CleanDatabaseSystemJNDI");

... 

int idCourse = tsr.CreateCourse("Test1", "JUnitTest1", 10, idTrainer);
int idCourseMaterial = tsr.CreateCourseMaterial(idCourse, idTrainer, 1, "CourseMaterial");
int idLecture = tsr.CreateLecture(idCourseMaterial, "Test");

...
cdsr.removeCourseMaterial(idCourseMaterial);
cdsr.removeLecture(idLecture);
cdsr.removeCourse(idCourse);

CleanDatabaseSystem имеет:

@Remove
    public void removeCourse(int idCourse) {
        Course course = new Course();
        course = manager.find(Course.class, idCourse);
        if(course != null){
            manager.remove(course);     
        }
    }


@Remove
    public void removeCourseMaterial(int idCourseMaterial) {
        CourseMaterial courseMaterial = new CourseMaterial();
        courseMaterial = manager.find(CourseMaterial.class, idCourseMaterial);
        if(courseMaterial != null){
            manager.remove(courseMaterial);
        }
    }


@Remove
    public void removeLecture(int idLecture) {

        Lecture lecture = new Lecture();
        lecture = manager.find(Lecture.class,idLecture);
        if (lecture != null) {
            manager.remove(lecture);
        }

    }

И сущность

@Entity
public class Course implements java.io.Serializable{

    ...

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }


    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }


    public int getCredits() {
        return credits;
    }
    public void setCredits(int credits) {
        this.credits = credits;
    }


    @ManyToOne(cascade={CascadeType.ALL})
    public Trainer getTrainer() {
        return trainer;
    }

    public void setTrainer(Trainer trainer) {
        this.trainer = trainer;
    }

    @ManyToMany(targetEntity = lesson.domain.Trainee.class, cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    @JoinTable(name="COURSE_TRAINEE", joinColumns= @JoinColumn(name="COURSE_ID", unique=false), inverseJoinColumns=@JoinColumn(name="TRAINEE_ID", unique=false))
    public Set<Trainee> getStudents() {
        return students;
    }

    public void setStudents(Set<Trainee> students) {
        this.students = students;
    }

}



@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class CourseMaterial extends LearningObject implements java.io.Serializable{

    ...

    @OneToMany(cascade={CascadeType.ALL})
    public Set<Lecture> getLectures() {
        return lectures;
    }

    public void setLectures(Set<Lecture> lectures) {
        this.lectures = lectures;
    }

    public String getMaterialName() {
        return materialName;
    }

    public void setMaterialName(String materialName) {
        this.materialName = materialName;
    }

    public void insertLecture(Lecture lecture){
        this.lectures.add(lecture);
    }
}


@Entity
public class Lecture implements java.io.Serializable {

    ...

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getTopic() {
        return topic;
    }


    public void setTopic(String topic) {
        this.topic = topic;
    }

    @OneToMany(cascade={CascadeType.ALL})
    public Set<Papers> getPapers() {
        return papers;
    }

    public void setPapers(Set<Papers> papers) {
        this.papers = papers;
    }


    @OneToMany(cascade={CascadeType.ALL})
    public Set<Slide> getSlides() {
        return slides;
    }

    public void setSlides(Set<Slide> slides) {
        this.slides = slides;
    }


    @OneToMany(cascade={CascadeType.ALL})
    public Set<Example> getExamples() {
        return examples;
    }

    public void setExamples(Set<Example> examples) {
        this.examples = examples;
    }


    public void insertPapers(Papers papers){
        this.papers.add(papers);
    }

    public void insertSlide(Slide slide){
        this.slides.add(slide);
    }

    public void insertExample(Example example){
        this.examples.add(example);
    }

}

Я не понимаюпроблема.Это каскад?Я пропустил какие-либо аннотации?

Спасибо

1 Ответ

0 голосов
/ 21 января 2011

Похоже, что ваш материал курса взят из лекций - вы, вероятно, захотите сначала удалить лекции, а затем материал курса.

...