hibernate映射关系之一对多(二)

2014-11-24 01:42:34 · 作者: · 浏览: 5
dd(student); //classes.setStudents(students) 把班级中的学生重新更新了 transaction.commit(); session.close(); } /** * 已经存在一个学生,新建一个班级,并且建立该学生和该班级之间的关系 * Hibernate: select student0_.sid as sid1_0_, student0_.sname as sname1_0_, student0_.description as descript3_1_0_ from Student student0_ where student0_.sid= Hibernate: select max(cid) from Classes Hibernate: insert into Classes (cname, description, cid) values ( , , ) Hibernate: update Student set cid= where sid= */ @Test public void testSaveClasses_R(){ /** * 1、查找学生 * 2、新建班级 * 3、建立关系 */ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = (Student)session.get(Student.class, 2L); Classes classes = new Classes(); classes.setCname(肠胃班); classes.setDescription(腐败的根源); Set students = new HashSet (); students.add(student); classes.setStudents(students); session.save(classes); transaction.commit(); session.close(); } /** * Hibernate: select max(cid) from Classes Hibernate: insert into Classes (cname, description, cid) values ( , , ) Hibernate: update Student set sname= , description= where sid= Hibernate: update Student set cid= where sid= */ @Test public void testSaveClasses_R_2(){ /** * 1、查找学生 * 2、新建班级 * 3、建立关系 */ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setSid(2L); Classes classes = new Classes(); classes.setCname(肠胃班); classes.setDescription(腐败的根源); Set students = new HashSet (); students.add(student); classes.setStudents(students); session.save(classes); transaction.commit(); session.close(); } /** * 说明: * 当Classes.hbm.xml映射文件中: * * 当session.save/update classes时,隐式操作的对象是student, * 对student决定save操作还是update操作,主要的判断依据是student中sid值在
数据库中有没有对应的值 */ /** * 已经存在一个学生,已经存在一个班级,解除该学生和原来班级之间的关系,建立该学生和新班级之间的关系 * Hibernate: select classes0_.cid as cid0_0_, classes0_.cname as cname0_0_, classes0_.description as descript3_0_0_ from Classes classes0_ where classes0_.cid= Hibernate: select student0_.sid as sid1_0_, student0_.sname as sname1_0_, student0_.description as descript3_1_0_ from Student student0_ where student0_.sid= Hibernate: select classes0_.cid as cid0_0_, classes0_.cname as cname0_0_, classes0_.description as descript3_0_0_ from Classes classes0_ where classes0_.cid= Hibernate: select students0_.cid as cid0_1_, students0_.sid as sid1_, students0_.sid as sid1_0_, students0_.sname as sname1_0_, students0_.description as descript3_1_0_ from Student students0_ where students0_.cid= Hibernate: select students0_.cid as cid0_1_, students0_.sid as sid1_, students0_.sid as sid1_0_, students0_.sname as sname1_0_, students0_.description as descript3_1_0_ from Student students0_ where students0_.cid= Hibernate: update Student set cid=null where cid= 解除关系 Hibernate: update Student set cid= where sid= 建立关系 只需要再重新建立关系即可 */ @Test public void testRealse_Rebuild(){ /** * 1、查找班级 * 2、查找学生 * 3、解除关系 * 4、建立关系 */ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); //Classes classes = (Classes)session.get(Classes.class, 5L); Student student = (Student)session.get(Student.class, 2L); Classes classes2 = (Classes)session.get(Classes.class, 5L); //classes.getStudents().remove(student);//解除关系 classes2.getStudents().add(student);