标签:
在我们平时所学的关系型数据库中,我们会大量处理表与表之间的关系,如果表比较多的话处理起来就比较繁琐了,但是hibernate给我们提供了很大的便利,这些便利让我们处理起来方便。
如果我们把表的每条记录当成一个对象的话,那我们我们的映射关系可以分为四种
1)一对一
2)一对多
3)多对一
4)多对多
现在我们假设有四个表,员工表,部门表,办工作表,职位表。
有如下映射关系
1)多个员工对应一个部门
2)一个部门对应多个员工
3)一个员工对应多个职位(这里我们假设一个人有多大能力,就要承担多大责任,所有就先多对多啦~O(∩_∩)O~)。
4)一个职位对应多个员工
5)一个员工对应一张办公桌,一张办公桌对应一个员工。
1.多对一 与 一对多
通过上面的描述我们知道员工多个员工对应着一个部门
员工实体(多方)
1 package entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Emp { 7 8 private int id ; //员工id 9 private String name ; //员工姓名 10 private int age ; //员工年龄 11 private Dept dept; //员工部门 ,注意这里是Dept对象哦,不是id哦 12 13 public int getId() { 14 return id; 15 } 16 public void setId(int id) { 17 this.id = id; 18 } 19 public String getName() { 20 return name; 21 } 22 public void setName(String name) { 23 this.name = name; 24 } 25 public int getAge() { 26 return age; 27 } 28 public void setAge(int age) { 29 this.age = age; 30 } 31 public Dept getDept() { 32 return dept; 33 } 34 public void setDept(Dept dept) { 35 this.dept = dept; 36 } 37 public Set<Position> getPositions() { 38 return positions; 39 } 40 public void setPositions(Set<Position> positions) { 41 this.positions = positions; 42 } 43 44 } 45 46 }
员工实例与数据库表映射关系配置(多方)
1 <!DOCTYPE hibernate-mapping PUBLIC 2 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 5 <!-- 员工实体类Emp与员工表t_emp的映射 --> 6 <hibernate-mapping > 7 <class name="entity.Emp" table="t_emp"> 8 9 <!-- 主键id配置 --> 10 <id name="id" column="id"> 11 <!-- 12 数据库的主键生成策略 native配置为使用数据库自带的生成策略 关于参数详解参考:http://www.cnblogs.com/yfyzy/p/4675041.html 13 --> 14 <generator class="native"></generator> 15 </id> 16 17 <!-- 属性设置 --> 18 <property name="name" column="name" > 19 </property> 20 <property name="age" column="age"> 21 </property> 22 23 <!-- 多对一配置,多个员工对应一个部门 --> 24 <many-to-one name = "dept" class="entity.Dept" 25 column = "dept_id" cascade="save-update"> 26 </many-to-one> 27 28 </class> 29 </hibernate-mapping>
部门实体(一方)
1 package entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Dept { 7 private int id; // 部门id 8 private String dname; // 部门名称 9 private Set<Emp> emps = new HashSet<Emp>(); //该部门的员工,是一个集合。 10 11 public int getId() { 12 return id; 13 } 14 15 public void setId(int id) { 16 this.id = id; 17 } 18 19 public String getDname() { 20 return dname; 21 } 22 23 public void setDname(String dname) { 24 this.dname = dname; 25 } 26 27 public Set<Emp> getEmps() { 28 return emps; 29 } 30 31 public void setEmps(Set<Emp> emps) { 32 this.emps = emps; 33 } 34 35 }
部门实体与数据表的映射(一方)
1 <!DOCTYPE hibernate-mapping PUBLIC 2 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 5 <!-- 部门实体类Dept与员工表t_dept的映射 --> 6 <hibernate-mapping> 7 <class name = "entity.Dept" table = "t_dept"> 8 9 <!-- 主键id配置 --> 10 <id name="id" column="id"> 11 <!-- 12 数据库的主键生成策略 native配置为使用数据库自带的生成策略 关于参数详解参考:http://www.cnblogs.com/yfyzy/p/4675041.html 13 --> 14 <generator class="native"></generator> 15 </id> 16 17 <!-- 属性设置 --> 18 <property name="dname" column="dname" > 19 </property> 20 21 <!-- 一对多配置,一个部门有多个员工,所以是一个集合 --> 22 <set name = "emps" cascade = "all" inverse="true"> 23 <key column = "dept_id"></key> 24 <one-to-many class="entity.Emp"></one-to-many> 25 </set> 26 27 </class> 28 </hibernate-mapping>
2.多对多
这里我们假设的是,一个员工对应多个职位,一个职位有多个员工。
员工:
实体类
1 package entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Emp { 7 8 private int id ; //员工id 9 private String name ; //员工姓名 10 private int age ; //员工年龄 11 private Dept dept; //员工部门 ,注意这里是Dept对象哦,不是id哦 12 private Set<Position> positions = new HashSet<Position>(); //注意这里是一个Position职位集合,我们这里假设一个员工可以对应多个职位 13 14 public int getId() { 15 return id; 16 } 17 public void setId(int id) { 18 this.id = id; 19 } 20 public String getName() { 21 return name; 22 } 23 public void setName(String name) { 24 this.name = name; 25 } 26 public int getAge() { 27 return age; 28 } 29 public void setAge(int age) { 30 this.age = age; 31 } 32 public Dept getDept() { 33 return dept; 34 } 35 public void setDept(Dept dept) { 36 this.dept = dept; 37 } 38 public Set<Position> getPositions() { 39 return positions; 40 } 41 public void setPositions(Set<Position> positions) { 42 this.positions = positions; 43 } 44 }
员工实体与数据库映射关系
1 <!DOCTYPE hibernate-mapping PUBLIC 2 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 5 <!-- 员工实体类Emp与员工表t_emp的映射 --> 6 <hibernate-mapping > 7 <class name="entity.Emp" table="t_emp"> 8 9 <!-- 主键id配置 --> 10 <id name="id" column="id"> 11 <!-- 12 数据库的主键生成策略 native配置为使用数据库自带的生成策略 关于参数详解参考:http://www.cnblogs.com/yfyzy/p/4675041.html 13 --> 14 <generator class="native"></generator> 15 </id> 16 17 <!-- 属性设置 --> 18 <property name="name" column="name" > 19 </property> 20 <property name="age" column="age"> 21 </property> 22 23 <!-- 多对一配置,多个员工对应一个部门 --> 24 <many-to-one name = "dept" class="entity.Dept" 25 column = "dept_id" cascade="save-update"> 26 </many-to-one> 27 28 <!-- 多对多配置,一个员工可以对应多个职位 --> 29 <set name="positions" inverse="false" cascade="save-update" table="t_emp_position"> 30 <key column="emp_id"></key> 31 <many-to-many class = "entity.Position" column = "position_id"> 32 </many-to-many> 33 </set> 34 35 </class> 36 </hibernate-mapping>
职位
实体
1 package entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Position { 7 private int id ; //职位id 8 private String positionName ; //职位名称 9 private Set<Emp> emps = new HashSet<Emp>(); //存放这种职位的员工 10 11 public Set<Emp> getEmps() { 12 return emps; 13 } 14 public void setEmps(Set<Emp> emps) { 15 this.emps = emps; 16 } 17 public int getId() { 18 return id; 19 } 20 public void setId(int id) { 21 this.id = id; 22 } 23 public String getPositionName() { 24 return positionName; 25 } 26 public void setPositionName(String positionName) { 27 this.positionName = positionName; 28 } 30 31 }
实体与数据库表的映射关系
1 <!DOCTYPE hibernate-mapping PUBLIC 2 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 5 <!-- 职位实体类Emp与员工表t_position的映射 --> 6 <hibernate-mapping> 7 <class name="entity.Position" table="t_position"> 8 9 <!-- 主键id配置 --> 10 <id name="id" column = "id"> 11 <generator class="native"></generator> 12 </id> 13 14 <!-- 属性设置 --> 15 <property name="positionName" column="position_name"/> 16 17 <!-- 多对多配置,一个职位可以对应多个员工 --> 18 <set name="emps" inverse="true" cascade="save-update" table="t_emp_position"> 19 <key column="position_id"></key> 20 <many-to-many class = "entity.Emp" column = "emp_id"> 21 </many-to-many> 22 </set> 23 24 </class> 25 26 </hibernate-mapping>
3.一对一
标签:
原文地址:http://www.cnblogs.com/yfyzy/p/4690559.html