2011-01-21 1 views
1

J'ai un prbolem avec hibernate entitymanager et en particulier avec l'instruction remove.Hibernate problème avec instruction remove

J'essaie de retirer une entité de la base de données mais le système renvoie cette erreur.

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`)) 

Le code de ligne qui génèrent ce errore sont ceci:

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); 

Le CleanDatabaseSystem ont:

@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); 
     } 

    } 

Et l'entité sont

@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), [email protected](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); 
    } 

} 

Je ne comprendre le problème. La cascade est-elle? J'ai manqué des annotations?

Merci

Répondre

0

On dirait que votre matériel de cours est référencé de conférences - vous aurez probablement envie de supprimer les cours d'abord, et le matériel de cours seconde.

Questions connexes