1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射:
1.1:一对多和多对一映射,举例说明:
学生和老师:
一个老师可以教多个学生 【一对多映射】
多个学生可以被一个老师教【多对一映射】
部门与员工:
一个部门有多个员工【一对多映射】
多个员工属于一个部门【多对一映射】
1.2:多对多,举例说明:
项目和开发员工:【双向一对多即多对多映射】
一个项目有多个开发人员【一对多】
一个开发人员参与多个项目【一对多】
<?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">
<!-- 如果hibernate-mapping的package属性直接初始化了,下面就可以直接引用了 -->
<hibernate-mapping package="com.bie.po">
<class name="Dept" table="dept">
<!-- 第一首先写主键映射 -->
<id name="deptId" column="deptId">
<generator class="native"></generator>
</id>
<!-- 第二写非主键映射 -->
<property name="deptName" column="deptName" length="20" type="string"></property>
<!--
第三写其他映射,比如这里的set集合映射,
-->
<!--
一对多关联映射配置(通过部门管理到员工)
Dept映射关键点
(1)指定映射的集合属性:""emps;
(2)集合属性对应的集合表:"employee";
(3)集合表的外键字段:employee.empId
(4)集合元素的类型
-->
<!-- name指定了映射的集合的属性,即集合实例化的emps;table指定了集合属性对应的集合表 -->
<set name="emps" table="employee">
<!--column指定了集合表的外键 -->
<key column="deptId"></key>
<!-- class由于上面已经写了包名,这里直接使用即可 -->
<one-to-many class="Employee"/>
</set>
</class>
</hibernate-mapping>
<?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">
<!-- 这里指定package,里面就可以直接引用了 -->
<hibernate-mapping package="com.bie.po">
<class name="Employee" table="employee">
<!-- 1:主键映射 -->
<id name="empId" column="empId">
<generator class="native"></generator>
</id>
<!-- 2:非主键映射 -->
<property name="empName" column="empName" length="20" type="string"></property>
<property name="salary" column="salary" type="double"></property>
<!--
多对一的映射配置;Employee映射的关键点
(1)映射的部门属性:dept
(2)映射的部门对新,对应的外键字段:deptId
(3)部门的类型:Dept
-->
<many-to-one name="dept" column="deptId" class="Dept"></many-to-one>
</class>
</hibernate-mapping>