标签:
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);
}
}
标签:
原文地址:http://www.cnblogs.com/zhangbaowei/p/4868067.html