在hibernate中将更多对象添加到现有列表中,一对多单向

时间:2015-01-10 22:50:22

标签: java hibernate jpa orm one-to-many

我已经研究了几个关于hibernate一对多单向关系的例子,并想知道如何将新对象添加到现有列表中。

假设我有一个MyClass类

@OneToMany(fetch=FetchType.LAZY, cascade={
                    CascadeType.PERSIST, 
                    CascadeType.REMOVE})
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinTable(name="enrolled_student", 
        joinColumns = {@JoinColumn(name="Class_ID")},
        inverseJoinColumns = {@JoinColumn(name="STUDENT_ID") })
public List<Student> getStudentList() { return studentList;}
public void setStudentList(List<Student> studentList) { this.studentList = studentList;}
private List<Student> List;

如果我有一个学生名单,如s1,s2,s3。现在我想在课堂上添加学生s4。我怎么能这样做?

我试图这样做:

@Override
@Transactional
public void addStudentToClass(MyClass class, Student student) {
    List<student> list = new ArrayList<Student>();
    list.add(student);
    budget.setStudentList(list);
    classDao.update(budget);
}

但它没有像我预期的那样奏效。它删除了所有现有的学生s1,s2,s3,然后坚持s4。

1 个答案:

答案 0 :(得分:0)

  1. 如果myClass已分离,但studentList已经初始化:

    Override
    @Transactional
    public void addStudentToClass(MyClass myClass, Student student) {
        myClass.getStudentList().add(student);
        classDao.update(myClass);
    }
    
  2. 如果myClass已分离,但之前尚未初始化studentList:

    Override
    @Transactional
    public void addStudentToClass(MyClass myClass, Student student) {
        MyClass attachedMyClass = classDao.merge(myClass);
        attachedMyClass.getStudentList().add(student);
    }