SSH框架之Hibernate的关联映射之一对多、多对一映射

来源:互联网 发布:linux零基础 编辑:程序博客网 时间:2024/05/16 09:43

关联映射之一对多、多对一映射

一、需求:
部门与员工
一个部门有多个员工 【一对多】
多个员工,属于一个部门 【多对一】

二、逻辑分析:

三、代码实现
1、javabean及映射文件的配置:
1)Employee.java、Employee.hbm.xml

2)Dept.java、Dept.hbm.xml

完整的Dept.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">      <hibernate-mapping package="sram.oneTomany" auto-import="true">     <class name="Dept" table="t_dept">        <id name="deptId">            <generator class="native"></generator>        </id>        <property name="deptName" length="20"></property>        <!--             一对多关联映射的配置(通过部门管理员工)            Dept 映射关键点:                1.  指定 映射的集合属性: "emps"                2.  集合属性对应的集合表: "t_employee"                3.  集合表的外键字段   "t_employee. dept_id"                4.  集合元素的类型             table="t_employee"可以省略,            因为有对应的<one-to-many class="Employee"/>,            并且可以找到Employee.hbm.xml            如果写上,那么talbe的值"t_employee"一定要与            Employee.hbm.xml(<class name="Employee" table="t_employee">)中的表名一致         -->        <set name="emps" table="t_employee">            <!--                 colunmn的值(dept_id),一定要与Employee.hbm.xml中的                <many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>                的colunm值一致             -->            <key column="dept_id"></key>            <!--                 class指定集合元素类型,sram.oneTomany.Employee,                但是因为<hibernate-mapping package="sram.oneTomany" auto-import="true">                这里已经指定包名,所以只写Employee就OK            -->            <one-to-many class="Employee"/>        </set>   </class></hibernate-mapping>

2、测试类App1_save.java——实现保存的功能

package sram.oneToMany;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App1_save {    public static SessionFactory sf;    static{        sf = new Configuration()            .configure()            .addClass(Dept.class)            .addClass(Employee.class)//测试使用            .buildSessionFactory();

1)部门方(一的一方操作)

2)【推荐】员工方(多的一方操作)

3、数据库结果:
1)员工表:

2)部门表:

4、测试类App2_get.java——实现保存的功能

package sram.oneToMany;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App1_save {    public static SessionFactory sf;    static{        sf = new Configuration()            .configure()            .addClass(Dept.class)            .addClass(Employee.class)//测试使用            .buildSessionFactory();

1)通过部门方获取另一方:

2)通过员工方获取另一方:

四、总结:
1、在一对多与多对一的关联关系中,保存数据最好通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!

2、概念:
配置一对多与多对一,这种叫“双向关联”
只配置一对多,叫“单向一对多”
只配置多对一,叫“单向多对一”

3、注意:配置了哪一方,哪一方才有维护关联关系的权限!

1 0
原创粉丝点击