【Hibernate学习之路5】对象关系映射

Hibernate对象关系简单映射有三种——一对一映射。一对多映射,多对多映射

  1. 一对一映射
    例如Dept表与Emp表。
    首先在Dept实体类中增加Set类型的emps属性,勇于存放雇员信息。
    private Integer deptno;
    private String dname;
    private String loc;
    private Set<Emp> emps = new HashSet();

然后在Dept.hbm.xml文件中增加一对多属性

<hibernate-mapping>
    <class name="com.web.bean.Dept" table="dept">
        <id name="deptno" column="deptno">
            <generator class="assigned"></generator>
        </id>
        <property name="dname" column="dname"></property>
        <property name="loc" column="loc"></property>
        <!-- 一对多关系映射-->
        <!--name配置实体类中集合属性名称 -->
        <set name="emps">
            <!-- 配置关键字段(主键)名称-->
            <key column="deptno"></key>
            <!--关联映射实体类完整路径 -->
            <one-to-many class="com.web.bean.Emp"/>
        </set>
    </class>
</hibernate-mapping>

测试:

    Dept d = (Dept)session.get(Dept.class, 20);
        System.out.println(d.getDname()+" "+d.getLoc());
        Set<Emp> set = d.getEmps();
        for(Emp e : set){
            System.out.println(e.getEname()+" 、"+e.getJob()+" "+e.getSal()+" "+e.getDeptno());
        }
  1. 一对多映射
    跟多对一差不多,首先在Emp实体类中增加Dept对应的属性
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
    private Dept dept;

其次,修改配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name = "com.web.bean.Emp" table = "emp">
        <id name = "empno" column="empno">
            <generator class="assigned"></generator>
        </id>
        <property name="ename" column="ename"></property>
        <property name="job" column="job"></property>
        <property name="mgr" column="mgr"></property>
        <property name="hiredate" column="hiredate"></property>
        <property name="sal" column="sal"></property>
        <property name="comm" column="comm"></property>
        <!--多对一映射配置-->
        <!-- 
        name:关联实体类映射名称
        class:关联实体类路径
        column:关联字段主键(外键)
        -->
        <many-to-one name = "dept"  class  = "com.web.bean.Dept" column="deptno"></many-to-one>
    </class>
</hibernate-mapping>
  1. 多对多映射
    可以简单理解为互相多对一映射,这里换一个环境,假设两张表——商品表,顾客表。两个表的关系是m-n关系。
    首先在Tuser(顾客)实体类增加商品属性
    private Integer tid;
    private String tname;
    private Set<Product> products = new HashSet();

然后在Product(商品)中增加顾客属性

    private Integer pid;
    private String pname;
    private String remark;
    private Double price;
    private Set<Tuser> tusers = new HashSet();

再修改两者的配置文件

<!--商品的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.web.bean.Product" table="product">
        <id name="pid" column="pid">
            <generator class="assigned"></generator>
        </id>
        <property name="pname" column="pname"></property>
        <property name="remark" column="remark"></property>
        <property name="price" column="price"></property>
        <!-- 多对多关联映射 -->
        <set name="tusers" table="orders">
            <key column="pid"></key>
            <many-to-many class="com.web.bean.Tuser" column="tid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
<!--顾客的配置-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <class name="com.web.bean.Tuser" table="tuser">
        <id name="tid" column="tid">
            <generator class="assigned"></generator>
        </id>
        <property name="tname" column="tname"></property>
        <!-- 多对多关联映射 -->
        <!-- 
            set name 关联属性名称
            set table 关联第三方关联表
         -->
        <set name="products" table="orders">
            <!-- key column 主键 -->
            <key column="tid"></key>
            <!-- 
                class 关联实体类完整路径
                column 关联字段(外键)
             -->
            <many-to-many class="com.web.bean.Product" column="pid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值