【学习笔记】实例解说Hibernate 一对多、多对一关联关系

来源:互联网 发布:淘宝客服评价系统 编辑:程序博客网 时间:2024/06/05 20:20

前言:

这是我学习的总结,如有不当,欢迎大家指点!

这里以员工和部门作为例子给大家解说:

假设,一个员工只有一个部门,但是一个部门就可以有多个员工。

那么员工和部门就是多对一关系,部门和员工就是一对多关系。

// 员工 - 部门    //  N   -  1

通常:外键在多的一方,引用“1”的一方的主键


主要的实体类:

Department.java

import java.util.Set;/** * 部门 * @author Jerry * Department.java *  */public class Department {private Integer deptId;private String name;//部门名称// 有很多的员工private Set<Employee> list;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getDeptId() {return deptId;}public void setDeptId(Integer deptId) {this.deptId = deptId;}public Set<Employee> getList() {return list;}public void setList(Set<Employee> list) {this.list = list;}}



Employee.java

/** * 员工 * @author Jerry * Employee.java *  */public class Employee {private Integer emId;private String name;// 员工也有部门private Department dept;public String getName() {return name;}public void setName(String name) {this.name = name;}public Department getDept() {return dept;}public void setDept(Department dept) {this.dept = dept;}public Integer getEmId() {return emId;}public void setEmId(Integer emId) {this.emId = emId;}}



配置的映射文件:

Department.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- This mapping demonstrates --><!-- 告诉hibernate需要找哪个表 --><hibernate-mapping package="f_hbm_oneToMany"><!-- User表对应的映射关系 --><class name="Department" table="department"><id name="deptId"><generator class="identity" /></id><property column="name" generated="never" lazy="false" name="name" type="string" /><!-- Employee属性,List集合,表达的是本类与Employee的一对多的关系 --><set name="list"><key column="dept"></key><!-- key元素:对方表中的外键列(多的那方的表) --><one-to-many class="Employee"/><!-- 因为是关联关系,因此要用一对多声明 --></set></class></hibernate-mapping>



Employee.hbm.xml:外键的解释已经在里面了

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- This mapping demonstrates --><!-- 告诉hibernate需要找哪个表 --><hibernate-mapping package="f_hbm_oneToMany"><!-- User表对应的映射关系 --><class name="Employee" table="employee"><id name="emId"><generator class="identity" /></id><property column="name" name="name" type="string" /><!-- department属性,表达的是本类与Department的多对一的关系 这里的column指的是这个外键的存放,可以不用写,hibernate会自动寻找Department类的映射文件,并且使用映射文件指定的列也可以与Department指定的<key column="dept"></key>相同,如果不同,hibernate会自动生成一个新的列,造成数据冗余                        class属性:关联的实体类型column:外键列【关联对象的表的主键值】--><many-to-one name="dept" class="Department"></many-to-one></class></hibernate-mapping>



hibernate.cfg.xml文件就不说了,主要是引入两个类的映射文件

<mapping resource="Department.hbm.xml" /><mapping resource="Employee.hbm.xml" />


1 0
原创粉丝点击