Удаление коллекции Hibernate после промывки - PullRequest
0 голосов
/ 23 августа 2011

Данные коллекции удаляются из базы данных после сброса сеанса. Кажется, 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 голосов
/ 23 августа 2011

Это означает, что вы хотите добавить только несколько курсов для студента. Таким образом, вы должны только добавлять новые курсы в список 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 студента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...