package dao.po;
import java.util.Set;
/**
* 部门类
*
* @author zl
*
*/
public class Department
{
private int id; //部门的ID
private String name; //部门的名称
private Set<Employee> emps; //部门下的所有员工 (一对多关系)
}
package dao.po;
/**
* @author zl 员工类
*/
public class Employee
{
private int id; // 员工的ID
private String name; // 员工的名称
private Department depart; //员工所在部门 (是多对一关系)
}
映射文件 :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="dao.po">
<class name="Department">
<id name="id">
<generator class="native"/>
</id>
<property name="name" not-null="true" length="255" column="`name`"/>
<set name="emps"> <!-- emps 是Department的一个属性 -->
<key column="depart_id"></key> <!-- 通过员工表的 depart_id字段来关联,它是字段名 -->
<one-to-many class="Employee"/> <!-- emps的类型是Employee -->
</set>
</class>
</hibernate-mapping>
下面是重点:
<set name="emps"> <!-- emps 是Department的一个属性 -->
<key column="depart_id"></key> <!-- 通过员工表的 depart_id字段来关联,它是字段名 -->
<one-to-many class="Employee"/> <!-- emps的类型是Employee -->
</set>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="dao.po">
<class name="Employee">
<id name="id">
<generator class="native"/>
</id>
<property name="name" not-null="true" length="255" column="`name`"/>
<!-- 这里做多对一映射 -->
<!-- name="depart"是Employee类的属性名 -->
<!-- column="depart_id" 是表中字段名 -->
<!-- -->
<many-to-one name="depart" column="depart_id" not-null="true"></many-to-one>
</class>
</hibernate-mapping>
一对多 (一个部门 对 多个员工)
查询部门(部门下有员工)
public static void main(final String[] args)
{
final Department de = query(2);
final Set<Employee> set = de.getEmps(); //本部门的所有员工
for (final Employee em : set)
{
System.out.println(em.getName());
}
}
/**
* 查询部门(部门下有员工)
*
* @param id
* 部门ID
* @return 部门对象
*/
public static Department query(final int id)
{
Session session = null;
try
{
session = HibernateUtil.getSeesion();
final Transaction tx = session.beginTransaction();
final Department de = (Department) session.get(Department.class, id); //按ID查
//因为 部门的 "员工" 属性会懒加载,
//在session关闭后,调用de.getEmps()无法取到员工信息
//所以这里用 Hibernate.initialize(de.getEmps()) 提前加载一下.
Hibernate.initialize(de.getEmps());
tx.commit();
return de;
}
finally
{
if (session != null)
{
session.close();
}
}
}
分享到:
相关推荐
Hibernate 一对多关联映射的测试,主要使用部门与员工的级联关系进行添加测试.
NULL 博文链接:https://elf8848.iteye.com/blog/340767
一个部门有多个员工【一对多映射】 多个员工属于一个部门【多对一映射】 1.2:多对多,举例说明: 项目和开发员工:【双向一对多即多对多映射】 一个项目有多个开发人员【一对多】 一个开发人员参与多个项目【一对多...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
考核评分、考勤打卡、请假信息,部门,职位等级,加班信息,薪资信息,学历,出差信息跟员工有相关的联系,有相关的关系,例如员工对考核评分一对多关系等。而考核评分属于考核项,它们的关系为1对1关系。请假申请...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...
徐林 行政部考勤负责人 对共享文件夹里的"考勤资料"有读取、写入权限,对"部门资料"里的"行政部"有修改权,对"部门资料"里其他部门文件为拒绝,除此之外,所有共享文件都为只读权限。 黄红 市场部 对"部门资料"里的...
由于职务信息与员工的对应关系是多对多关系,职务关系与部门的对应关系是一对多的关系,所以这里需要两张中间表来维系它们之间的关系 5. 员工信息与职务信息中间表s -------- <项目介绍> 该资源内项目源码是个人的...
公司的业务规则概括说明如下:公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等公司按照工时和小时工资率支付工资,...
主要用于多维度统计培训过程效果,追踪员工职业生涯初期评价。同时征集,培训过程评价,方便培训过程优化。 Spring Boot、MyBatis和Vue.js是一组流行的技术框架,它们可以被结合用于构建现代化的Web应用程序。一个...
8.@Many:实现一对多结果集封装。 9.@CacheNamespace(blocking = true):开启二级缓存 环境: 无映射文件 示例一 CRUD操作 示例 二 多对一 延时加载(懒加载) 根据id查询员工及其员工的部门信息 1.1 User类结构 ...