Hibernate表关联关系小结

添加外键:

        <!-- 
            添加外键 :
                        name  : 对应类中的外键属性名
                        class : 对应引用外键的类
                        column: 外键中数据库中的ID字段名称

        -->

        <many-to-one name="teacher" class="Teacher" column="teacher_id">
        </many-to-one>

一对一:

        <!-- 
            一对一:
                    name : 对应当前类中被关联类的属性
                           private Department dept;
                    class: 被关联的类的完全限定名
        -->
        <one-to-one name="dept" class="Department">
        </one-to-one>

基于外键关联的一对一:

        A表(有外键字段)
        <!-- 
            使用 many-to-one 映射1-1关系
            unique="true" 添加外键唯一约束
         -->
        <many-to-one name="mgr" class="Manager" column="mgrId" unique="true" >
        </many-to-one>

        B表(一对一)
         <!-- 
            property-ref="mgr":指定使用被关联实体主键以外的字段作为关联字段
                               例:使用Department表(引用外键的表),
                               用Department的外键mgr与Manager的ID做关联
                               如果不添加property-ref,则B表与A表的主键ID进行关联,如果添加了property-ref,则B表与A表的外键字段进行关联(而A表的外键字段是根据B表的主键关联的,达到了一对一的效果)
          -->
        <one-to-one name="dept" class="Department" property-ref="mgr">
        </one-to-one>

基于主键的一对一:

         A表(主键根据B表主键生成)
         <!-- 
            当前类的主键生成策略必须为:foreign (使用外键生成当前主键)
            其 one-to-one 节点还应增加constrained="true"属性,以使当前
            【主键添加上外键约束】
          -->
        <one-to-one name="mgr" class="Manager" constrained="true">
        </one-to-one>

        B表
        <!-- 映射1-1关联关系 -->
        <one-to-one name="dept" class="Department">
        </one-to-one>

双向一对多:

        A表中(一对多,类中有Set集合):
        <!-- 
            table:与Order的表名对应
            key的column:与Order的外键字段名对应
            inverse:true,Customer放弃维护Order的外键引用
                    可以减少UPDATE语句
         -->
         <!-- 
            cascade="delete" 级联删除
         -->
         <!-- 
            cascade="delete-orphon" 解除外键关系,删除孤儿(Order有关的外键记录)
          -->
          <!-- 
            cascade="save-update" 级联保存
                当执行session.save(customer)的同时,也会将与customer有外键关系的
                order同时保存
          -->
          <!-- 
            order-by="":在查询时对集合中的元素排序,order-by中
                        使用的是表的字段名,而不是持久化类的属性名

                        例:order-by="ORDER_NAME DESC" (desc降序排)
           -->
        <set name="orders" table="orders" inverse="true">
            <key column="customer_id"></key>
            <one-to-many class="Order"/>
        </set>

        B表中(有对A表引用的外键):
        <!-- 映射多对一的关联关系 -->
        <many-to-one name="customer" class="Customer" column="customer_id">
        </many-to-one>

双向多对多:

        A表中:
        <!-- 
            注:双向多对多,两个持久化类的XML配置文件中,
                set节点的table名要一致,同时,列名要交叉相同

                并且其中一个set节点一定要放弃维护关联关系!
                inverse="true"
         -->
        <!-- 
            name :当前类中的Set集合属性名
            table:指定中间表名称
        -->
        <set name="items" table="category_item">
            <key>
                <!-- 设置当前类中的Set集合在数据库的字段名 -->
                <column name="c_id"></column>
            </key>
            <!-- 
                使用 many-to-many 指定多对多的关联关系,
                column:执行Set集合中持久化类在中间表的外键列的名称
            -->
            <!-- 
                class : 被关联的另一个类的完全限定名
                column: 另一个类在中间表中的字段名   
             -->
            <many-to-many class="Item" column="i_id"></many-to-many>
        </set>

        B表中:
        <set name="categories" table="category_item" inverse="true">
            <key>
                <column name="i_id"></column>
            </key>
            <many-to-many class="Category" column="c_id"></many-to-many>
        </set>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值