中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Hibernate怎么實現一個多對一單項關聯

發布時間:2020-12-04 16:29:13 來源:億速云 閱讀:143 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關利用Hibernate怎么實現一個多對一單項關聯,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

概念

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

分類

利用Hibernate怎么實現一個多對一單項關聯

        關聯關系分為上述七種,但是由于相互之間有各種關系,可以簡化,例如:多對一與一對多映射,只是側重的角度不對而已。 

映射技巧 

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

(1)寫注釋

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

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

多對一
<many-to-one name=“” class=“” column=“”/>
一對多
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)填空

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

          &#8226; name屬性:屬性名(注釋中的第1問號)

          &#8226; class屬性:關聯的實體類型(注釋中的第2個問號)

          &#8226; 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中,這個相信大家都知道為什么。      

          我們后面所有關聯映射的博文都使用此映射技巧來寫映射文件,明白之后,速度會非常快。

多對一關聯映射

映射原理 

       多的一端維護關聯關系,在“多”的一端加入一個外鍵,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外鍵,指向“一”的一端。 

實例

       比如,多個用戶屬于同一組,我們從對象模型和關系模型兩個角度來分析一下這個例子,如下:

利用Hibernate怎么實現一個多對一單項關聯

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

利用Hibernate怎么實現一個多對一單項關聯

作用:

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

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

 代碼

User類

public class User { 
 private int id; 
 private String name; 
 private Group group; 
  
 public int getId() { 
 return id; 
 } 
 public void setId(int id) { 
 this.id = id; 
 } 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public Group getGroup() { 
 return group; 
 } 
 public void setGroup(Group group) { 
 this.group = group; 
 } 
} 

Group類

public class Group { 
 private int id; 
 private String name; 
 public int getId() { 
 return id; 
 } 
 public void setId(int id) { 
 this.id = id; 
 } 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 

User.hbm.xml

<&#63;xml version="1.0"&#63;> 
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.liang.hibernate"> 
 <class name="User" table="t_user"> 
 <id name="id"> 
  <generator class="native"></generator> 
 </id> 
 <property name="name"></property> 
 <!-- group屬性,表達的是本對象與Group的多對一的關系--> 
 <many-to-one name="group" class="Group" column="groupid"></many-to-one> 
 <!-- 解釋: 
  多對一關系標簽: 
  <many-to-one name=“” class=“” column=“”/> 
  
  1、第1個問號:group是User類的屬性,對應于name屬性名 
  2、第2個問號:class表達的是本對象(User)與Group的關系 
  3、第3個問號:column是屬性名+Id 
  當我們寫完注釋之后,我們直接拷貝問號的對應關系即可。 
  --> 
 </class> 
</hibernate-mapping> 

 Group.hbm.xml

<&#63;xml version="1.0"&#63;> 
<!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.liang.hibernate.Group" table="t_group"> 
 <id name="id"> 
  <generator class="native"></generator> 
 </id> 
 <property name="name"></property> 
 </class> 
</hibernate-mapping> 

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

利用Hibernate怎么實現一個多對一單項關聯

     項目中,多對一關聯映射是最常見的映射,但它是Hibernate的關聯映射中最簡單的一種映射關系

上述就是小編為大家分享的利用Hibernate怎么實現一個多對一單項關聯了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪泽县| 九台市| 石嘴山市| 永兴县| 望谟县| 瑞丽市| 绥宁县| 孝义市| 通城县| 阿拉尔市| 漯河市| 交城县| 青岛市| 六枝特区| 涞水县| 永康市| 松溪县| 福建省| 兴国县| 江安县| 张家界市| 聂拉木县| 荃湾区| 册亨县| 九江县| 巴中市| 茌平县| 剑川县| 夏邑县| 舒城县| 库尔勒市| 五原县| 潜江市| 迁西县| 清水河县| 泗阳县| 宜良县| 建始县| 和静县| 资溪县| 贵阳市|