热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hibernate中一对多关联关系保存

packagecom.hibernate1.study;importjava.util.HashSet;importjava.util.Set;importorg.hibernate.Sess
package com.hibernate1.study;


import java.util.HashSet;
import java.util.Set;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;


public class DoTest {
    /**
     * 1、保存班级
     * 2、保存学生
     * 3、保存班级的时候同时保存学生
     * 4、保存班级的时候同时保存学生,并且建立班级和学生之间的关系
     * 5、已经存在一个班级,新建一个学生,并且建立该学生和该班级之间的关系
     * 6、已经存在一个学生,新建一个班级,并且建立该学生和该班级之间的关系
     * 7、已经存在一个学生,已经存在一个班级,解除该学生和原来班级之间的关系,建立该学生和新班级之间的关系
     * 8、已经存在一个学生,解除该学生和该学生所在班级之间的关系
     * 9、解除该班级和所有的学生之间的关系,再重新建立该班级和一些新的学员之间的关系
     * 10、解除该班级和所有的学生之间的关系
     * 11、删除班级
     *      *
     *          *  解除该班级和所有的学生之间的关系
     *          *  删除该班级
     *      *   
     *          删除班级的同时删除学生
     * 12、删除学生
     *      同删除班级
     */
    
    private static SessionFactory sessionFactory;
    static{
        Configuration cOnfiguration=new Configuration();
        configuration.configure();
        sessiOnFactory=configuration.buildSessionFactory();
    }
    
//    //1、保存班级
//    @Test
//    public void testSaveClasses(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction= session.beginTransaction();
//        Classes classes=new Classes();
//        classes.setCname("张");
//        classes.setCdesc("123");
//        session.save(classes);
//        transaction.commit();
//        session.close();
//    }
//    //2、保存学生
//    @Test
//    public void testSaveStudents(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction= session.beginTransaction();
//        Student student=new Student();
//        student.setSname("你好");
//        student.setSdesc("一起来");
//        session.save(student);
//        transaction.commit();
//        session.close();
//    }
    //3、保存班级的时候同时保存学生
    /*
     * Hibernate: select max(Sid) from student
        Hibernate: select max(Cid) from classes
        Hibernate: insert into student (Sname, Sdesc, Sid) values (?, ?, ?)
        Hibernate: insert into classes (Cname, Cdesc, Cid) values (?, ?, ?) 
     */
    @Test
    public void testSaveClasses_Students(){
        Session session=sessionFactory.openSession();
        Transaction transaction= session.beginTransaction();
        
        Student student1=new Student();
        student1.setSname("李华");
        student1.setSdesc("大二学生");     
        Student student2=new Student();
        student2.setSname("小明");
        student2.setSdesc("大二学生");     
        Classes classes=new Classes();
        classes.setCname("软件工程2016级01班");
        classes.setCdesc("编程语言");
        //设置关联关系
        Set students=new HashSet();
        students.add(student1);
        students.add(student2);
      classes.setStudents(students);
        session.save(classes);
        
        transaction.commit();
        session.close();
    }
    
    //4、保存班级的时候同时保存学生,并且建立班级和学生之间的关系
    /*classes.hbm.xml中设置;
     * Hibernate: select max(Cid) from classes
        Hibernate: select max(Sid) from student
        Hibernate: insert into classes (Cname, Cdesc, Cid) values (?, ?, ?)
        Hibernate: insert into student (Sname, Sdesc, Sid) values (?, ?, ?)
        Hibernate: update student set Cid=? where Sid=?
        
        保存班级的时候同时保存学生,并且建立班级和学生之间的关系
     *         在classes.hbm.xml文件中
     *        
     *      inverse的值为默认或者false,才能让classes维护student的关系
        设置
        Hibernate: select max(Cid) from classes
        Hibernate: select max(Sid) from student
        Hibernate: insert into classes (Cname, Cdesc, Cid) values (?, ?, ?)
        Hibernate: insert into student (Sname, Sdesc, Sid) values (?, ?, ?)
        不建立关联
     */
//    @Test
//    public void testSaveClasses_R_Students(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction= session.beginTransaction();
//        
//        Student student=new Student();
//        student.setSname("Tom");
//        student.setSdesc("1234567890-");    
//        
//        //session.save(student);必须删除掉
//        
//        Set students=new HashSet();
//        students.add(student);
//        
//        Classes classes=new Classes();
//        classes.setCname("屌丝班");
//        classes.setCdesc("都是纯逗比纯屌丝");
//        
//        classes.setStudents(students);
//        
//        session.save(classes);
//        
//        transaction.commit();
//        session.close();
//    }
//    
//    
//    //5、已经存在一个班级,新建一个学生,并且建立该学生和该班级之间的关系
//    /**
//     *  Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: select students0_.Cid as Cid1_1_, students0_.Sid as Sid1_, students0_.Sid as Sid0_0_, students0_.Sname as Sname0_0_, students0_.Sdesc as Sdesc0_0_ from student students0_ where students0_.Cid=?
//        Hibernate: select max(Sid) from student
//        Hibernate: insert into student (Sname, Sdesc, Sid) values (?, ?, ?)
//        Hibernate: update student set Cid=? where Sid=?
//     */
//    @Test
//    public void testSaveClassesAndStudents_R(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction=session.beginTransaction();
//        Classes classes=(Classes) session.get(Classes.class, new Integer(1));
//        Student student=new Student();
//        student.setSname("Lucy");
//        student.setSdesc("qwertyuiop");
//        Set set=new HashSet();
//        //建立关系
//        classes.getStudents().add(student);
//        
//        //classes.setStudents(set);   把班级中的学生重新更新了
//        
//        transaction.commit();
//        session.close();
//    }
//    //6、已经存在一个学生,新建一个班级,并且建立该学生和该班级之间的关系
//    /*
//     *  Hibernate: select student0_.Sid as Sid0_0_, student0_.Sname as Sname0_0_, student0_.Sdesc as Sdesc0_0_ from student student0_ where student0_.Sid=?
//        Hibernate: select max(Cid) from classes
//        Hibernate: insert into classes (Cname, Cdesc, Cid) values (?, ?, ?)
//        Hibernate: update student set Cid=? where Sid=?
//     */
//    @Test
//    public void testSaveStudentAndClasses_R(){
//        Session session =sessionFactory.openSession();
//        Transaction transaction= session.beginTransaction();
//        
//        Student student=(Student) session.get(Student.class, 2L);
//        
//        Classes classes=new Classes();
//        classes.setCname("文艺青年班");
//        classes.setCdesc("感觉都是文艺青年棒棒哒");
//        
//        Set set=new HashSet();
//        set.add(student);
//        classes.setStudents(set);
//        
//        session.save(classes);
//        
//        transaction.commit();
//        session.close();
//    }
//    
//    //7、已经存在一个学生,已经存在一个班级,解除该学生和原来班级之间的关系,建立该学生和新班级之间的关系
//    /*
//     *  Hibernate: select student0_.Sid as Sid0_0_, student0_.Sname as Sname0_0_, student0_.Sdesc as Sdesc0_0_ from student student0_ where student0_.Sid=?
//        Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: select students0_.Cid as Cid1_1_, students0_.Sid as Sid1_, students0_.Sid as Sid0_0_, students0_.Sname as Sname0_0_, students0_.Sdesc as Sdesc0_0_ from student students0_ where students0_.Cid=?
//        Hibernate: update student set Cid=? where Sid=?//建立关系
//     * 
//     */
//    @Test
//    public void testSaveRemove_Student_Classes(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction=session.beginTransaction();
//        Student student=(Student) session.get(Student.class, 2L);
//        
//        Classes classes=(Classes) session.get(Classes.class, new Integer(1));
//        classes.getStudents().add(student);//建立关系,没有必要删除与原来班级的关系,建立关系之后,自动解除与原来班级的关系
//        transaction.commit();
//        session.close();
//    }
//    //8、已经存在一个学生,解除该学生和该学生所在班级之间的关系
//    /*
//     *  Hibernate: select student0_.Sid as Sid0_0_, student0_.Sname as Sname0_0_, student0_.Sdesc as Sdesc0_0_ from student student0_ where student0_.Sid=?
//        Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: select students0_.Cid as Cid1_1_, students0_.Sid as Sid1_, students0_.Sid as Sid0_0_, students0_.Sname as Sname0_0_, students0_.Sdesc as Sdesc0_0_ from student students0_ where students0_.Cid=?
//        Hibernate: update student set Cid=null where Cid=? and Sid=?
//     * 
//     */
//    @Test
//    public void testRemoveStudent(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction =session.beginTransaction();
//        
//        Student student=(Student) session.get(Student.class, new Integer(1));
//        Classes classes=(Classes)session.get(Classes.class, new Integer(1));
//        classes.getStudents().remove(student);
//        transaction.commit();
//        session.close();
//    }
//    
//    //9、解除该班级和所有的学生之间的关系,再重新建立该班级和一些新的学员之间的关系
//    /*
//     *  Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: select student0_.Sid as Sid0_, student0_.Sname as Sname0_, student0_.Sdesc as Sdesc0_ from student student0_ where student0_.Sid in (3 , 4 , 5)
//        Hibernate: update student set Cid=null where Cid=?
//        Hibernate: update student set Cid=? where Sid=?
//        Hibernate: update student set Cid=? where Sid=?
//        Hibernate: update student set Cid=? where Sid=?
//     * 
//     */
//    @Test
//    public void testRemoveAllAndAddSome(){
//        Session session =sessionFactory.openSession();
//        Transaction transaction=  session.beginTransaction();
//        
//        Classes classes=(Classes) session.get(Classes.class, new Integer(1));
//        List students= session.createQuery("FROM Student WHERE Sid IN(3,4,5) ").list();
//        
//        Set sets=new HashSet(students);        
//        classes.setStudents(sets);
//        
//        transaction.commit();
//        session.close();
//    }
//    
//    //10、解除该班级和所有的学生之间的关系
//    /*
//     *  Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: update student set Cid=null where Cid=?
//     */
//    @Test
//    public void testRemoveAll(){
//        Session session=sessionFactory.openSession();
//        Transaction transaction =session.beginTransaction();
//        
//        Classes classes=(Classes) session.get(Classes.class, new Integer(1));
//        classes.setStudents(null);
//        
//        transaction.commit();
//        session.close();
//    }
//    /*
//     * 11、删除班级
//     *      *
//     *          *  解除该班级和所有的学生之间的关系
//     *          *  删除该班级
//     *      *   
//     *          删除班级的同时删除学生
//     * 12、删除学生
//     *      同删除班级
//     * 
//     */
//    //11、删除学生,同删除班级
//    /*
//     *  Hibernate: select classes0_.Cid as Cid1_0_, classes0_.Cname as Cname1_0_, classes0_.Cdesc as Cdesc1_0_ from classes classes0_ where classes0_.Cid=?
//        Hibernate: select students0_.Cid as Cid1_1_, students0_.Sid as Sid1_, students0_.Sid as Sid0_0_, students0_.Sname as Sname0_0_, students0_.Sdesc as Sdesc0_0_ from student students0_ where students0_.Cid=?
//        Hibernate: update student set Cid=null where Cid=?
//        Hibernate: delete from student where Sid=?
//        Hibernate: delete from student where Sid=?
//        Hibernate: delete from student where Sid=?
//        Hibernate: delete from classes where Cid=?
//     */
//    @Test
//    public void testDeleteClasses(){
//        Session session =sessionFactory.openSession();
//        Transaction transaction=session.beginTransaction();
//        
//        Classes classes=(Classes) session.get(Classes.class, new Integer(1));
//        session.delete(classes);
//        
//        transaction.commit();
//        session.close();   
}


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
author-avatar
棋牌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有