Hibernate关联关系通俗口诀以及模板配置

一.一对一

1.口诀:


   首先明了外或主          

   若是外则唯一多

   多中属性油腻克(unique)

   若是主则约束主

   一中属性坑死德(constrained)

   油先生和坑先生

   两者皆对大欢喜(true)


2.一对一(基于外键的一对一)

    1.1无外键方:


    <one-to-one name=" " class=" " property-ref=" "></one-to-one>   


    1.2有外键方:就是多对一加上唯一性约束

    

    <many-to-one name=" " class=" " column=" " unique="true"/>


    1.3解释:

           name:对应实体类中的属性名,如id,name,description

           class:所映射对方类的完整全名

           property-ref:对方映射中表达此一对一的属性

           column:有外间方的外键在数据库表中的名字

           unique:唯一性约束

3.一对一(基于主键的一对一)

    2.1无外键方:


    <one-to-one name=" " class=" " property-ref=" "></one-to-one> 

    

    与基于外键方一样。

    

    2.2有外键方:采用一对一的映射


    <id name="id" >

      <generator class="foreign">

         <param name="property">XXXX</param>

      </generator>

    </id>


    <one-to-one name="XXXX" class=" " constrained="true"></one-to-one>


    2.3解释:

           constrained:默认为false,表示不在主键列上加上外键约束,true表示要加上外键约束

           XXXX:类中所要映射的属性

二.一对多

   1.口诀:

    共同映射用最多

    一对多来上集合

    多对一来上属性

    一对多欲弃江山

    反转一改抱美人

    

    

   2.一对多方(共同映射)


   <set name=" " inverse=" ">

        <key column=" "></key>

        <one-to-many class=" "/>

   </set>


   3.多对一方(共同映射)


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

   

   4.解释:

         name:类中所要映射的属性

         inverse:反转,代表本方是否放弃对关系的维护,默认为fasle,true是确定放弃

         key-column:为多的一方的外键列设置名字,一般是已方类的小写,与many中的column名字要一致

         one-to-many-class:一的一方的全名

         many-to-one-class:多的一方的全名


    5.单方映射

      5.1单向多对一:单向的多对一是由需求产生的。是人为的设定的。

      只在多的一方进行配置:


      <many-to-one name=" " column=" "cascade=" "/>


      cascade:级联,被关联的对象和本对象具有相同的操作,默认值为none,表示没有级联。

      有以下几个值和状态:

        save-update:对本对象做save()、update()、或saveOrUpdate()时,对这个关联对象也做saveOrUpdate()操作

        delete:对本对象做delete()时,对这个关联对象也做delete()操作。

        delete-orphan:当关联的对象移除与本对象的关系时,就成了孤儿,就会被删除(注意,只会删除本Session中


新产生的孤儿对象)。

        all:所有的级联,但不包括删除孤儿。

all-delete-orphan:所有的级联,包括删除孤儿。


      5.2单向一对多:单向的一对多是由需求产生的。是人为的设定的。

         他的映射原理和单向一对多是一样的,都是在多的一端加入一个外键,指向一的一端。

         只在一的一方配置:

   

         <one-to-many class=" "/>



三.多对多

   1.口诀:

   九阴九阳威力同

   互相结合大圆满

   若想进行自阉割

   反转必是绝情刀



   2.多对多(对称)

   两边都是同样的配置模板,只是填空不一样

   <set name=" " table=" " inverse=" ">

<key column=" "></key>

<many-to-many class=" " column=" " ></many-to-many>

   </set>


   3.解释:

         name:本类中存放对方的集合属性

         table:双方共用的中间表,表名必须一致

         inverse:只能有一方使用,任何一方都可以,看具体需求

         class:映射的对方类的全名

         column:映射的对方类中的外键名,一般是已类名称的小写


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。