您的位置:首页 > 其它

多对多的关系操作

2015-09-04 15:05 323 查看
把表建好了之后,我们来进行多对多的关系操作。

public void saveStudent_cascade_Course(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();

Student student=new Student();
student.setSname("ansel");
student.setSdescription("nice");

Course course=new Course();
course.setCdescription("exciting");
course.setCname("PE");

Set<Course> courses=new HashSet<Course>();
courses.add(course);
student.setCourses(courses);

/**
* 注意:这里是保存的student,因为我们在上面设置的是student的属性,
要找准,如果在这里找错了,就直接保存到save里面的对象,剩下的表会没有内容的
*/

session.save(student);

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


运行之后,三张表都增加了数据:

course:



student:



student_course:



E:把一个课程,更改为另外一个课程:

public void transferCourse(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
//获取到学生
Student student=(Student)session.get(Student.class, 1L);
//获取到要更改的课程
Course course=(Course)session.get(Course.class, 1L);
//把要更改的课程移除
student.getCourses().remove(course);
//获取目标课程
Course course2=(Course)session.get(Course.class, 2L);
//添加目标课程
student.getCourses().add(course2);

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


由于我自己添加了一些课程,在这里没有把代码展示出来

结果如图



把一个学生加入到一些课程中:

public void testSaveStudent_cascade_Course(){
//把一个学生添加到id1、2、3的课程中
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
//得到学生
Student student=(Student) session.get(Student.class, 3L);
//得到123课程的集合,这里使用的是hql语句,注意是从pojo类中找
List<Course> courses=session.createQuery("from Course where cid in (1,2,3)").list();
//设置学生的课程,这个学生可能原来有课程
student.getCourses().addAll(courses);
transaction.commit();
session.close();
}


操作结果为:



Hibernate: select student0_.sid as sid2_0_, student0_.sdescription as sdescrip2_2_0_, student0_.sname as sname2_0_ from Student student0_ where student0_.sid=?

Hibernate: select course0_.cid as cid0_, course0_.cname as cname0_, course0_.cdescription as cdescrip3_0_ from Course course0_ where course0_.cid in (1 , 2 , 3)

Hibernate: select courses0_.sid as sid2_1_, courses0_.cid as cid1_, course1_.cid as cid0_0_, course1_.cname as cname0_0_, course1_.cdescription as cdescrip3_0_0_ from student_course courses0_ inner join Course course1_ on courses0_.cid=course1_.cid where courses0_.sid=?

Hibernate: insert into student_course (sid, cid) values (?, ?)

Hibernate: insert into student_course (sid, cid) values (?, ?)

Hibernate: insert into student_course (sid, cid) values (?, ?)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: