还是参照员工与部门的例子,从员工角度看,员工与部门是多对一的关联;而从部门角度
看,部门与员工则是一对多的关系,需要修改的代码如下:
部门类 (Department.java):
public class Department {
private int id ;
private String name ;
private Set emps ; // 用于员工的集合
...getter/setter
}
部门对应的映射文件 (department.hbm.xml):
......
<class name="Department">
...
<set name="emps"> // Department类中的集合变量
<key column="depart_id"/> // 外键,employee表中的字段
<one-to-many class="Employee"> // 集合中存放的对象
</set>
...
</class>
......
测试代码,首先添加一个部门信息,然后添加两个员工信息,最后查询部门信息,看查询结
果是否能查询到那两个员工的信息,代码如下:
.......
// 省略了一些Hibernate代码
/*
1. 实例化一个部门信息
*/
Department depart = new Department () ;
depart.setName ("depart name") ;
/*
2. 实例化两个员工信息
*/
Employee emp1 = new Employee () ;
emp1.setDepart (depart) ;
emp1.setName ("emp1 name");
Employee emp2 = new Employee () ;
emp2.setDepart (depart) ;
emp2.setName ("emp2 name");
/*
3. 查询此部门信息,然后查看其下的员工数目是否为2个
*/
// 省略部分代码
Department depart = (Department)s.get (Department.class , departid) ;
Systemt.out.println ("emp size:" + depart.getEmps().size () ) ;
/*
4. 调用3中的方法,传一个部门编号为1
*/
首先查询部门表,查询部门编号为1的部门信息,然后再从员工表中查询部门编号为1的员工信息,所以输出结果为2,为什么会按部门编号在员工表中查询呢?主要原因是在department.hbm.xml文件中配置了<key column="depart_id"/>
......