【Hibernate四】关系映射之一对多双向关联

!在多的一方的类中添加一的一方的成员变量!

1.在一对多单项关联的基础上,再在Student类中增加Classes的成员变量,提供get/set方法!

2. 修改Student.hbm.xml文件:
<? xml  version= "1.0" encoding ="utf-8"?>
<! DOCTYPE  hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"  >
< hibernate-mapping >
      < class  name="cn.itheima03.hibernate.domain.Student">
            <id name= "sid" length ="5">
                <generator class= "increment"></generator >
            </id>
            <property name= "sname" length ="20"></ property>
            <property name= "description" length="50" ></property>
          
            <!--
              column 外键
                 是在客户端通过Student来关联Classes
              在这里没有inverse属性
                 如果用student来维护关系,没有必要维护外键,外键就在student这张表中
                  一对多,多的一方维护关系效率比较高
           -->
            <many-to-one name= "classes" column ="cid" class="cn.itheima03.hibernate.domain.Classes" cascade="save-update" >
            </many-to-one>
      </ class  >
     
</ hibernate-mapping >

3.DAO
/**
 * 一对多的单项关联
 *  @author Think
 * 相关的操作:
 *    1、保存班级
 *    2、保存学生
 *    3、保存班级同时保存学生
 *    4、有一个新的学生,加入到一个班级
 *    5、已经存在一个学生,新建一个班级,把该学生加入到新的班级
 *    6、已经存在一个学生,已经存在一个班级,解除该学生和班级之间的关系
 *    7、解析一些学生和一个班级之间的关系
 *    8、解除该班级和所有的学生之间的关系
 *    9、一个学生从一个班级转移到另外一个班级
 *    10、删除一个学生
 *    11、删除班级
 *       1、先解除关系,再删除班级
 *       2、在删除班级的同时删除学生
 */
public  class OneToManyDualTest extends HibernateUtils{
      /**
      * 1.保存班级
      */
      @Test
      public  void testSaveClasses(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes =  new Classes();
          classes.setCname(  "云三");
          classes.setDescription(  "云里的三、挺好" );
          session.save(classes);
          
          transaction.commit();
          session.close();
     }
     
      /**
      * 3.保存班级同时保存学生
      * 从学生角度出发
      * <many-to-one name="classes" column=" cid"
      *    class="cn.itheima03.hibernate.domain.Classes" cascade="save - update">
      */
      @Test
      public  void test3(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Student student=  new Student();
          student.setSname(  "李四");
          student.setDescription(  "李四网达到" );
          
          Classes classes=  new Classes();
          classes.setCname(  "勤务班");
          classes.setDescription(  "贡菜勤务就由他们来干啦" );
          
          student.setClasses(classes);
            //联动保存class;
          session.save(student);
          
          transaction.commit();
          session.close();
     }
     
      /**
      *   4、有一个新的学生,加入到一个班级
      */
      @Test
      public  void test4(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Student student=  new Student();
          student.setSname(  "小将");
          student.setDescription(  "小将是个灵活的小伙子" );
          
          Classes classes = (Classes) session.get(Classes. class  , 6L);
          student.setClasses(classes);
          
          session.save(student);
          
          transaction.commit();
          session.close();
     }
     
      /**
      *  5、已经存在一个学生,新建一个班级,把该学生加入到新的班级
      */
      @Test
      public  void test5(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Student student = (Student) session.get(Student. class  , 4L);
          
          Classes classes=  new Classes();
          classes.setCname(  "警卫班");
          classes.setDescription(  "守护神");
          
          student.setClasses(classes);
          
          
          transaction.commit();
          session.close();
     }
     
      /**
      * 6、已经存在一个学生,已经存在一个班级,解除该学生和班级之间的关系
      */
      @Test
      public  void test6(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Student student = (Student) session.get(Student. class  , 4L);
          
          student.setClasses(  null);
          
          
          
          transaction.commit();
          session.close();
     }
      /**
      *  7、解析一些学生和一个班级之间的关系
      */
      @Test
      public  void test7(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Student student1 = (Student) session.get(Student. class  , 2L);
          Student student2 = (Student) session.get(Student. class  , 3L);
          
          student1.setClasses(  null);
          student2.setClasses(  null);
          
          transaction.commit();
          session.close();
     }
     
      /**
      * 8、解除该班级和所有的学生之间的关系
      */
      @Test
      public  void test8(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes=(Classes) session.get(Classes. class  , 6L);
          classes.setStudents(  null);
          
          transaction.commit();
          session.close();
     }
     
      /**
      * 9、一个学生从一个班级转移到另外一个班级
      */
      @Test
      public  void test9(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes=(Classes) session.get(Classes. class  , 7L);
          Student student = (Student) session.get(Student. class  , 2L);
          
          student.setClasses(classes);
          
          transaction.commit();
          session.close();
     }
      /**
      *  10、删除一个学生
      */
      @Test
      public  void test10(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Student student = (Student) session.get(Student. class  , 2L);
          
          session.delete(student);
          
          transaction.commit();
          session.close();
     }
      /**
      * 先解除关系,再删除班级
      */
      @Test
      public  void test11(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes=(Classes) session.get(Classes. class  , 5L);
          classes.setStudents(  null);
          
          session.delete(classes);
          
          transaction.commit();
          session.close();
     }

      /**
      * 在删除班级的同时删除学生
      * 级联删除!
      * <many-to-one name="classes" column=" cid"
      *        class="cn.itheima03.hibernate.domain.Classes" cascade="all">
      */
      @Test
      public  void test12(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes=(Classes) session.get(Classes. class  , 9L);
          Set<Student> students = classes.getStudents();
            for (Student student : students) {
              session.delete(student);
          }
          transaction.commit();
          session.close();
     }
      /**
      * 在删除班级的同时删除学生
      *  <many- to-one name="classes" column=" cid"
      *        class="cn.itheima03.hibernate.domain.Classes" cascade="save - update">
      */
      @Test
      public  void test12_2(){
          Session session =   sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          
          Classes classes=(Classes) session.get(Classes. class  , 8L);
          Set<Student> students = classes.getStudents();
            //解除关系
          classes.setStudents(  null);
          
            for (Student student : students) {
              session.delete(student);
          }
          
          session.delete(classes);
          
          transaction.commit();
          session.close();
     }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值