Hibernate中一对多,多对多的XML配置文件对比

一对多XML配置文件

  • 一的一方的映射文件的创建
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.jxust.hibernate.demo1.Customer" table="cst_customer">
        <!-- 建立OID与主键映射 -->
        <id name="id" column="cust_id">
            <generator class="native"/>
        </id>
        <!-- 建立普通属性与表字段映射 -->
        <property name="name" column="cust_name"/>
        <property name="source" column="cust_source"/>
        <property name="industry" column="cust_industry"/>
        <property name="level" column="cust_level"/>
        <property name="phone" column="cust_phone"/>
        <property name="mobile" column="cust_mobile"/>

        <!--配置一对多的映射,放置多的一方的集合-->
        <!--
            set标签:
                *name:多的一方的对象集合的属性名称
        -->
        <set name="linkMans" cascade="save-update,delete" inverse="true">
            <!--
                key标签:
                    *column:多的一方的外键的名称
            -->
            <key column="lkm_cust_id"/>
            <!--
                one-to-many标签
                    *class:多的一方的类的全路径
             -->
            <one-to-many class="com.jxust.hibernate.demo1.LinkMan"/>
        </set>
    </class>
</hibernate-mapping>
  • 多的一方的映射文件的创建
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.jxust.hibernate.demo1.LinkMan" table="cst_linkman">
        <!-- 建立OID与主键映射 -->
        <id name="id" column="lkm_id">
            <generator class="native"/>
        </id>
        <!--建立普通属性与表字段映射-->
        <property name="name" column="lkm_name"/>
        <property name="gender" column="lkm_gender"/>
        <property name="phone" column="lkm_phone"/>
        <property name="mobile" column="lkm_mobile"/>
        <property name="email" column="lkm_email"/>
        <property name="qq" column="lkm_qq"/>
        <property name="position" column="lkm_position"/>
        <property name="memo" column="lkm_memo"/>

        <!--配置多对一的关系:放置的是一的一方的对象-->
        <!--
            many-to-one标签
                *name   :一的一方的对象的属性名称
                *class  :一的一方的类的全路径.
                *column :在多的一方的表的外键的名称-->
        <many-to-one name="customer" class="com.jxust.hibernate.demo1.Customer" column="lkm_cust_id" cascade="save-update,delete"/>
    </class>
</hibernate-mapping>

多对多XML配置文件

  • 某一方的映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.jxust.hibernate.demo2.User" table="sys_user">
        <!-- 建立OID与主键映射 -->
        <id name="user_id">
            <generator class="native"/>
        </id>
        <!-- 建立普通属性与字段映射 -->
        <property name="user_code"/>
        <property name="user_name"/>
        <property name="user_password"/>
        <property name="user_state"/>
        <!-- 建立与角色的多对多的映射关系 -->
        <!--
            set标签
              * name    :对方的集合的属性名称
              * table   :多对多的关系需要使用中间表,放的是中间表的名称.
        -->
        <set name="Roles" table="sys_user_role">
            <!--
                key标签:
                  * column   :当前的对象对应中间表的外键的名称
            -->
            <key column="user_id"/>
            <!--
                many-to-many标签:
                  * class    :对方的类的全路径
                  * column   :对方的对象在中间表中的外键的名称
            -->
            <many-to-many class="com.jxust.hibernate.demo2.Role" column="role_id"/>
        </set>
    </class>
</hibernate-mapping>

由于一对多中一的一方的XML文件与多对多中的XML文件都含有set标签,故容易弄混,因此来做个对比

  • set标签
    • 相同点: 都有特性name(对方的对象集合的属性名称),cascade,inverse
    • 一对多:
    • 多对多: 有特性table需要强调是中间表的名称
  • key标签
    • 相同点: 都有特性column(当前对象的id所对应的外键名称)
    • 一对多:
    • 多对多:
  • <?-to-many>标签 * 相同点: 都有特性class(另一方的类的全路径) * 一对多: * 多对多: 还要多些一个column特性(对方的对象的id对应的外键名称)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值