一对多指的是类与集合之间的关系
多对一指的是类与类之间的关系
one-to-many:一对多指的是类与集合之间的关系
映射文件的配置
many-to-one:多对一指的是类与类之间的关系
映射文件的配置
总结
1、一般情况下,一对多,多的一方维护关系,效率比较高
2、一对多,如果一的一方维护关系,实际上就是发出更新外键的update语句
3、如果多的一方维护关系,实际上就是更新了student表的所有的字段
4、一般情况下,Classes.hbm.xml文件中,针对set集合的invserse的值为true 不维护关系
@Test
public void testSaveStudent_Cascade_SaveClasses(){
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();
}
在更新学生的时候,保存班级
@Test
public void testUpdateStudent_Cascade_SaveClasses(){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
Student student = (Student)session.get(Student.class, 3L);
Classes classes = new Classes();
classes.setName("asdf");
//建立学生与班级之间的关系
student.setClasses(classes);
transaction.commit();
}
已经存在一个班级,已经存在一个学生,让该学生加入到该班级
@Test
public void testBuildR(){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
Student student = (Student)session.get(Student.class, 3L);
Classes classes = (Classes)session.get(Classes.class, 5L);
//建立学生和班级之间的关系
student.setClasses(classes);
transaction.commit();
}
把sid为1的学生从cid为5的班级转到3的班级
@Test
public void testTransform(){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
Classes classes = (Classes)session.get(Classes.class, 3L);
Student student = (Student)session.get(Student.class, 1L);
//建立关系
student.setClasses(classes);
transaction.commit();
}
解除一个班级和所有的学生之间的关系
@Test
public void testRealseAllR(){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
//提取cid为3的班级
Classes classes = (Classes)session.get(Classes.class, 3L);
Set<Student> students = classes.getStudents();
for (Student student : students) {
student.setClasses(null);
}
transaction.commit();
}
网友评论