2016-12-25 2 views
0

Ich habe zwei Einheiten Kurse und CourseUser. Kurse, die OneToMany-Annotation zu einem CourseUser zugeordnet werden. Nachdem ich einen CourseUser in einer Liste von CourseUsers in Course hinzugefügt und aktualisiert habe, wird in der Tabelle CourseUser eine neue Zeile angezeigt, die jedoch keinem Kurs zugeordnet ist. Wenn ich toString of courseUsers-Liste von Kursen nach dem Update aufruft, ist es leer.Hibernate OneToMany Beziehung nicht neue Daten zuordnen

@Entity 
@Table(name = "COURSES") 
public class Courses{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "course_id") 
    private int course_id; 

    @Column(name = "course_name", nullable = false) 
    private String courseName; 

    @Autowired 
    @OneToMany(mappedBy = "course", fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private Set<CourseUser> courseUsers = new HashSet<>(0); 

CourseUser Einheit:

@Entity 
@Table(name = "COURSE_USERS", 
    uniqueConstraints = {@UniqueConstraint(columnNames = {"course_name", "user_name"})}) 
public class CourseUser { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ev_id") 
    private int ev_id; 


    @Column(name = "course_name", nullable = false) 
    private String courseName; 

    @Column(name = "user_name", nullable = false) 
    private String userName; 

    @Column(name = "course_role") 
    private String courseRole; 

    @Column(name = "grade") 
    private int grade ; 

    @ManyToOne 
    @JoinColumn(name = "course_id") 
    private Courses course; 

das ist, wie ich neue courseUser zu einem Kurs hinzufügen:

Courses course = courseDAO.getCourse(id); 
Set<CourseUser> courseUsers = course.getCourseUsers(); 
CourseUser newUser = new CourseUser(); 
      newUser.setUserName(name); 
      newUser.setCourseRole(role); 
      newUser.setCourseName(course.getCourseName()); 
      courseUsers.add(newUser); 
      course.setCourseUsers(courseUsers); 
      update(course); 

und hier ist CoursesDAO Update-Methode: Bei

public void update(Courses course) { 

     Session session = sf.openSession(); 
     Transaction transaction = session.beginTransaction(); 
     session.merge(course); 
     session.flush(); 
     transaction.commit(); 
     session.close(); 
    } 
+0

Was ist der Zweck der Initialisierung 'Set courseUsers = new HashSet <> (0)'? –

+0

Ich habe es wie in diesem Tutorial getan https://www.mkyong.com/hibernate/hibernate-one-to-my-relationship-example-annotation/ – Petych

Antwort

0

Zuerst müssen Sie die Entity speichern, die ref von ID vertreten. In Ihrem Fall müssen Sie zunächst CourseUser speichern und dann zu Course hinzufügen.

Zum Beispiel:

Courses course = courseDAO.getCourse(id); 
Set<CourseUser> courseUsers = course.getCourseUsers(); 
CourseUser newUser = new CourseUser(); 
newUser.setUserName(name); 
newUser.setCourseRole(role); 
newUser.setCourseName(course.getCourseName()); 
// this row is very important 
// after thus operation newUser will have an id to be referenced 
courseUserDto.save(newUser); 
courseUsers.add(newUser); 
course.setCourseUsers(courseUsers); 
update(course); 

Außerdem gibt es einige redundante Code, den Sie geschrieben:

Set<CourseUser> courseUsers = course.getCourseUsers(); 
// ... 
course.setCourseUsers(courseUsers); 

course bereits Bezug auf courseUsers speichert.

Verwandte Themen