会话刷新后,将从数据库中删除集合数据。似乎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这样做。有没有办法做到这一点?
答案 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
列表中。