8、one2many 双向

one2many双向

1、配置文件的写法

    1.1 在1的一方的hbm.xml的配置

<!-- 使用了lazy=extra之后会稍微智能一些,会根据去的值的不同来判断是调用count和获取投影 -->
        <set name="stus" lazy="extra" inverse="true">
            <key column="cid" />  <!-- key用来指定在对方的外键的名称 -->
            <one-to-many class="Student" />  <!-- class用来设置列表中的对象类型 -->
        </set>

    1.2在n的一方的hbm.xml的配置

    <!-- many-to-one 用来映射多对一, name表示属性中的名称, column用来表示外键的名称 -->
        <many-to-one name="classroom" column="cid" />

2、关于one2many的提高效率的技巧

    2.1 ------- 不让1的一方来维护关系,inverse="true"

    2.2 ------  通过lazy=extra,来提高select语句的效率

    2.3 ------  通过先添加1的一方,再添加n的一方,来减少sql语句,提高效率

        

public void testAdd01() {
        Session session = null;
        try {
            session = HibernateUtil.openSession();
            session.beginTransaction();
            // 先添加1
            Classroom c = new Classroom();
            c.setGrade(2012);
            c.setName("计算机网络技术");

            // 在添加n
            Student stu1 = new Student();
            stu1.setName("猪八戒");
            stu1.setNo("001");
            stu1.setClassroom(c);

            Student stu2 = new Student();
            stu2.setName("孙悟空");
            stu2.setNo("002");
            stu2.setClassroom(c);

            // 设置关联关系
            c.getStus().add(stu1);
            c.getStus().add(stu2);
            stu1.setClassroom(c);
            stu2.setClassroom(c);
            

            // 保存
            session.save(c);
            session.save(stu1);
            session.save(stu2);
            

            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            if (session != null)
                session.getTransaction().rollback();
        } finally {
            HibernateUtil.close(session);
        }
    }

 

转载于:https://www.cnblogs.com/zhangbaowei/p/4868067.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值