刷新后删除Hibernate集合

时间:2011-08-23 06:14:38

标签: hibernate collections

会话刷新后,将从数据库中删除集合数据。似乎Hibernate检测到原始集合被替换,但在我们的遗留项目中,我们不希望Hibernate执行删除。有没有办法做到这一点?

以下是示例代码:

public class Student{
    @OneToMany(fetch=FetchType.EAGER)
    @JoinColumn(name="student_id")
    private List<Course> courses;
    ......

    public static void main(String[] args){
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        Student s = (Student) session.get(Student.class, id);
        //set new name
        s.setName("new name");

        // this is neccessary in our project, and I can't change it.
        List<Course> newCourses = new ArrayList<Course>();
        newCourses.add(...);
        s.setCourses(newCourses);  // replace the collection with new

        //update s
        session.update(s);

        session.getTransaction().commit();
        session.close();
    }
}

在事务提交之后,Hibernate将删除数据库中的集合数据,因为原始集合被替换为新集合,但我不希望Hibernate这样做。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这意味着您只想为学生添加一些课程。因此,您只应将新课程添加到学生的现有courses列表中,而不是将其替换为新列表:

List newCourses = new ArrayList();
newCourses.add(...);

/*** Add a list of new course instead of replacing with a new list***/
s.addCourse(newCourses);

addCourse(List courseList)是学生的一种方法,它会将输入列表courseList的所有元素添加到学生的内部courses列表中。