public class OneToMoreDoubleTest extends HibernateUtil {
/**
* 在保存学生的时候,级联保存班级*/
@Test
public void testSaveStudent_Cascade_SaveClasser (){
Session session=sessionFactory.getCurrentSession();
Transaction transaction =session.beginTransaction();
Student student=new Student();
student.setName("永超" );
Classes classes=new Classes();
classes.setName("苹果" );
student.setClasses(classes);
session.save(student);
transaction.commit();
}
/**
* 在更新学生的时候,保存班级
*
* Hibernate:
select
student0_.sid as sid1_1_0_,
student0_.name as name2_1_0_,
student0_.description as descript3_1_0_,
student0_.cid as cid4_1_0_
from
Student student0_
where
student0_.sid=?
Hibernate:
insert
into
C lasses(name, description)
values(?, ?)
Hibernate:
update
Student
set
name=?,
description=?,
cid=?
where
sid=?
* 多对多当中,多的一方在save-update的时候,在操作本身的时候,就对级联对象,进行
* 了操作,一对多则不一样
* */
@Test
public void testUpdateStudent_Cascade_SaveClasses (){
Session session =sessionFactory.getCurrentSession();
Transaction transaction =session.beginTransaction();
Student student=(Student) session.get(Student.class,3 L);
Classes classes=new Classes();
classes.setName("apple12" );
student.setClasses(classes);
session.update(student);
transaction.commit();
}
/**
* 已经存在一个班级,已经存在一个学生,让该学生就爱如到该班级
* 把sid 3的学生加入到cid 为5的班级
* 把sid 3的学生从cid 为4的班级转到cid 为5的语句也一样
* */
@Test
public void testBuildR (){
Session session=sessionFactory.getCurrentSession();
Transaction transaction=session.beginTransaction();
Student student=(Student)session.get(Student.class,3 L);
Classes classes=(Classes)session.get(Classes.class,5 L);
student.setClasses(classes);
transaction.commit();
}
/**
*解除一个班级和所有学生之间的关系
* */
@Test
public void testRealseAllR (){
Session session=sessionFactory.getCurrentSession();
Transaction transaction=session.beginTransaction();
Classes classes=(Classes)session.get(Classes.class,5 L);
Set<Student> students=classes.getStudents();
for (Student student:students){
student.setClasses(null );
}
transaction.commit();
}
}
总结
1、一般情况下,一对多,多的一方维护关系,效率比较高
2、一对多,如果一的一方维护关系,实际上就是发出更新外键的update 语句
3 、如果多的一方维护关系,实际上就是更新了student表的所有的字段
4 、一般情况下,Classes.hbm.xml文件中,针对set 集合的invserse的值为true
不维护关系