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