首先我们要了解一下什么是一对多,多对一,多对多
部门与员工
一个部门有多个员工; 【一对多】
多个员工,属于一个部门 【多对一】
项目与开发员工
一个项目,有多个开发人员!
一个开发人员,参与多个项目! 【多对多】
我们使用一个小例子来学习一下
步骤一: 建立员工类与部门类
步骤二:配置相关映射文件
Dept.hbm.xml
Employee.hbm.xml
步骤三:配置hibernate.cfg.xml
步骤四:测试
public class App2 {
private static SessionFactory sf;
static{
sf=new Configuration()
.configure()
//.addClass(Dept.class) <!-- 因为配置中加载了映射文件,所以这里先注释-->
//.addClass(Employee.class)
.buildSessionFactory();
}
@Test
public void test1(){
Session session=sf.openSession();
session.beginTransaction();
Dept dept=new Dept();
dept.setDeptName("测试部2");
Employee emp_zs=new Employee();
emp_zs.setEmpName("张三");
Employee emp_ls=new Employee();
emp_ls.setEmpName("李四");
dept.getEmps().add(emp_zs);
dept.getEmps().add(emp_ls);
session.save(emp_zs);
session.save(emp_ls);
session.save(dept); //保存部门,以及部门下所有员工
session.beginTransaction().commit();
session.close();
}
}
运行视图:
总结:
在一对多与多对一的关联关系中,保存数据最好的通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!
配置一对多与多对一,这种叫“双向关联”
只配置一对多, 叫“单项一对多”
只配置多对一, 叫“单项多对一”
注意:
配置了哪一方,哪一方才有维护关联关系的权限!
这里的配置指的是在配置文件中加入:
(一对多):
(多对一):
当配置的一方可以访问未配置的一方的数据:
示例:
通过部门查询员工
通过员工查询部门
未配置的一方不能访问另一方的数据:(这里将员工未进行配置,并进行通过员工查找部门操作)