Hiebernate中配置映射关系

Hibernate中配置映射关系

准备工作

  • 进行Hibernate的基本配置
  • 创建HibernateUtil工具类
  • 进行数据表的建立
  • 创建持久化类和映射关系文件

配置单向一对多关系

使用标签在一方的hbm.xml文件中,配置单向的一对多映射,如:

<!-- 配置单向的一对多映射 设置inverse属性为true 由多方维护关联关系 ,
            设置cascade="save-update",当进行保存和更新时级联操作所关联的对象-->
        <set name="students" table="student" inverse="false" lazy="true" cascade="save-update">
        <!-- 指定关联的外键列 -->
            <key>
                <column name="gid" />
            </key>
            <one-to-many class="entity.Student" />
        </set>

测试类:

    //将学生添加到班级
    public static void add(){
        Grade g = new Grade("JAVA1","JAVA软件开发一班");
        Student stu1 = new Student("张三","男");
        Student stu2 = new Student("青青","男");

        //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系
        g.getStudents().add(stu1);
        g.getStudents().add(stu2);

        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        session.save(g);
        session.save(stu1);
        session.save(stu2);
        tx.commit();
        HibernateUtil.closeSession(session);
    }

    //查询班级学生信息
    public static void findStudentsByGrade(){
        Session session = HibernateUtil.getSession();
        Grade grade = (Grade) session.get(Grade.class, 1);
        System.out.println(grade.getGname()+","+grade.getGdesc());
        Set<Student>students = grade.getStudents();
        for(Student stu : students){
            System.out.println(stu.getSname()+","+stu.getSex());
        }
    }

单向多对一的配置

在多方的hbm.xml文件中,使用标签配置
如:

<!-- 配置多对一关联配置 -->
        <many-to-one name="grade" class = "entity.Grade" column="gid"></many-to-one>

当双方关系都配置好后,即双向映射已经配置

测试:

    //保存,测试多对一映射
    public static void save(){
        Grade g = new Grade("JAVA1","JAVA软件开发一班");
        Student stu1 = new Student("呵呵","男");
        Student stu2 = new Student("小美","女");

        //设置关联关系
        g.getStudents().add(stu1);
        g.getStudents().add(stu2);
        stu1.setGrade(g);
        stu2.setGrade(g);

        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        session.save(g);
        //session.save(stu1);
        //session.save(stu2);
        tx.commit();
        HibernateUtil.closeSession(session);

    }

        //双向多对一测试
    public static void findGradeByStudent(){
        Session session = HibernateUtil.getSession();
        Student stu = (Student) session.get(Student.class, 2);
        Grade grade = stu.getGrade();
        System.out.println(stu.getSid()+","+stu.getSname()+","+stu.getSex());

        System.out.println(grade.getGid()+","+grade.getGname()+","+grade.getGdesc());
        HibernateUtil.closeSession(session);
    }

相关知识点:

1.inverse属性的用法

在一对多关联关系中默认有one方维护关联关系,因为是双向一对多关联关系,所以one方需进行两次关联关系的维护
,当在one方设置inverse属性值为true时,反转,即让多方进行关联关系的维护,此时不需要执行update 多方表名(student) set 单方表的主键(多方表中的外键即gid)等于单方某记录的gid值
当sid为值一,sid为值二,,,,(student表中有n个记录则需执行n次操作)这些操作,所以当在one方设置inverse属性值为true时有利于改善系统性能。

2.cascade属性的用法

  • 当设置cascade属性部位none时,Hibernate会自动持久化所关联的对象
  • cascade属性的常用设置:
  • all—>对所有操作进行级联操作
  • save-update–>执行保存和更新操作时进行级联操作
  • delete–>执行删除操作时进行级联操作
  • none–>对所有操作不进行级联操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值