Hibernate映射——多對一單向關聯映射(四)

 

    這篇博客,咱們開始介紹基於基本映射的關聯關係映射。html

 

概念

 

       基本映射是對一個實體進行映射,關聯映射就是處理多個實體之間的關係,將關聯關係映射到數據庫中,所謂的關聯關係在對象模型中有一個或多個引用。java

 

分類


         

            

        關聯關係分爲上述七種,可是因爲相互之間有各類關係,能夠簡化,例如:多對一與一對多映射,只是側重的角度不對而已。數據庫

 

映射技巧

 

       映射技巧是小編寫映射文件的過程,總結的經典內容,總共分爲四步,咋看不是特別易懂,可是效果很好。下面咱們以實例看技巧。app

 

(1)寫註釋框架

         格式爲:?屬性,表達的是本對象與?的?關係。this

         解釋:在寫映射文件以前先寫註釋,將問號的地方填上相應的內容。例如:<!-- group屬性,表達的是本對象(User)與Group的多對一的關係-->spa

 

(2)寫映射的框架(拷模版).net

 

多對一hibernate

<many-to-one name=「」 class=「」 column=「」/>xml

一對多

(Set)

<set name="">

        <key column=""></key>

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

</set>

多對多

(Set)

<set name="" table="">

        <key column=""></key>

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

</set>

 

 

(3)填空

          填空,就是將映射的框架信息,填寫完成,完成映射文件。

          • name屬性:屬性名(註釋中的第1問號)
          • class屬性:關聯的實體類型(註釋中的第2個問號)
          • column屬性:
               ○ <many-to-one column="..">:通常能夠寫成屬性名加Id後綴,如屬性爲group,則column值寫成groupId。
               ○ 一對多中的<key column="..">:從關聯的對方(對方是多對一)映射中把column值拷貝過來。
               ○ 多對多中的<key column=「..」>:通常能夠寫成本對象的名加Id後綴,如本對象名爲User,則寫爲userId。
               ○ 多對多中的<many-to-many column=「..」>:通常能夠寫爲關聯對象的名稱加Id後綴。
 

(4)完成

          將映射文件添加到hibernate.hbm.xml中,這個相信你們都知道爲何。

      

          咱們後面全部關聯映射的博文都使用此映射技巧來寫映射文件,明白以後,速度會很是快。

 

多對一關聯映射
 

映射原理

 

       多的一端維護關聯關係,在「多」的一端加入一個外鍵,指向「一」的一端。多的一端持有一的一端的引用,即在「多」的一端加外鍵,指向「一」的一端。

 

實例

 

       好比,多個用戶屬於同一組,咱們從對象模型和關係模型兩個角度來分析一下這個例子,以下:

      從上圖能夠看出,對象模型具備方向性,經過用戶(User)能夠看到組(Group),可是不能反過來。用戶和組各對應一張數據庫表,聚合關係須要一個外鍵(groupid)來表示,最後生成的表以下所示:

 

做用:

      當我拿到用戶時直接就能夠拿到用戶的組,hibernate在訪問多的一端時,能夠自動的加載關聯對象。對於用戶(User)來講,它的關聯對象是組(group)。

 

      上面都是多對一關聯映射的基本原理,以及相應的實例,下面咱們看一下代碼:

 

 代碼

User類

[java] view plain copy

  1. public class User {  
  2.     private int id;  
  3.     private String name;  
  4.     private Group group;  
  5.           
  6.     public int getId() {  
  7.         return id;  
  8.     }  
  9.     public void setId(int id) {  
  10.         this.id = id;  
  11.     }  
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public Group getGroup() {  
  19.         return group;  
  20.     }  
  21.     public void setGroup(Group group) {  
  22.         this.group = group;  
  23.     }  
  24. }  

Group類

[java] view plain copy

  1. public class Group {  
  2.     private int id;  
  3.     private String name;  
  4.     public int getId() {  
  5.         return id;  
  6.     }  
  7.     public void setId(int id) {  
  8.         this.id = id;  
  9.     }  
  10.     public String getName() {  
  11.         return name;  
  12.     }  
  13.     public void setName(String name) {  
  14.         this.name = name;  
  15.     }  

User.hbm.xml

[html] view plain copy

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="com.liang.hibernate">  
  6.     <class name="User" table="t_user">  
  7.         <id name="id">  
  8.             <generator class="native"></generator>  
  9.         </id>  
  10.         <property name="name"></property>  
  11.         <!-- group屬性,表達的是本對象與Group的多對一的關係-->  
  12.         <many-to-one name="group" class="Group" column="groupid"></many-to-one>  
  13.         <!-- 解釋:  
  14.             多對一關係標籤:  
  15.             <many-to-one name=「」 class=「」 column=「」/>  
  16.               
  17.             一、第1個問號:group是User類的屬性,對應於name屬性名  
  18.             二、第2個問號:class表達的是本對象(User)與Group的關係  
  19.             三、第3個問號:column是屬性名+Id  
  20.             當咱們寫完註釋以後,咱們直接拷貝問號的對應關係便可。  
  21.          -->  
  22.     </class>  
  23. </hibernate-mapping>  

 Group.hbm.xml

[html] view plain copy

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="com.liang.hibernate.Group" table="t_group">  
  7.         <id name="id">  
  8.             <generator class="native"></generator>  
  9.         </id>  
  10.         <property name="name"></property>  
  11.     </class>  
  12. </hibernate-mapping>  

 

生成的表結構,與上面的分析的關係模型同樣:
          

 

      項目中,多對一關聯映射是最多見的映射,但它是Hibernate的關聯映射中最簡單的一種映射關係。下篇博文,咱們介紹一對一單向關聯映射,謝謝關注。

相關文章
相關標籤/搜索