成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate關(guān)聯(lián)關(guān)系配置

開發(fā) 后端
本文將詳細(xì)的介紹Hibernate關(guān)聯(lián)關(guān)系的配置,包括一對(duì)多、一對(duì)一、和多對(duì)多的關(guān)系。詳細(xì)請(qǐng)看下文。

第一種關(guān)聯(lián)關(guān)系:一對(duì)多(多對(duì)一)

"一對(duì)多"是最普遍的映射關(guān)系,簡(jiǎn)單來講就如消費(fèi)者與訂單的關(guān)系。

一對(duì)多:從消費(fèi)者角的度來說一個(gè)消費(fèi)者可以有多個(gè)訂單,即為一對(duì)多。

多對(duì)一:從訂單的角度來說多個(gè)訂單可以對(duì)應(yīng)一個(gè)消費(fèi)者,即為多對(duì)一。

一對(duì)多關(guān)系在hbm文件中的配置信息:

消費(fèi)者(一方):

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.     <hibernate-mapping>  
  4.         <class name="com.suxiaolei.hibernate.pojos.Customer" table="customer">  
  5.             <!-- 主鍵設(shè)置 -->  
  6.             <id name="id" type="string">  
  7.                 <column name="id"></column>  
  8.                 <generator class="uuid"></generator>  
  9.             </id>  
  10.             <!-- 屬性設(shè)置 -->  
  11.             <property name="username" column="username" type="string"></property>  
  12.             <property name="balance" column="balance" type="integer"></property>  
  13.               
  14.             <set name="orders" inverse="true" cascade="all">  
  15.                 <key column="customer_id" ></key>  
  16.                 <one-to-many class="com.suxiaolei.hibernate.pojos.Order"/>  
  17.             </set>  
  18.         </class>  
  19.     </hibernate-mapping> 

訂單(多方):

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.     <hibernate-mapping> 
  4.         <class name="com.suxiaolei.hibernate.pojos.Order" table="orders"> 
  5.             <id name="id" type="string"> 
  6.                 <column name="id"></column> 
  7.                 <generator class="uuid"></generator> 
  8.             </id> 
  9.               
  10.             <property name="orderNumber" column="orderNumber" type="string"></property> 
  11.             <property name="cost" column="cost" type="integer"></property> 
  12.               
  13.             <many-to-one name="customer" class="com.suxiaolei.hibernate.pojos.Customer"   
  14.                          column="customer_id" cascade="save-update"> 
  15.             </many-to-one>          
  16.         </class> 
  17.     </hibernate-mapping> 

"一對(duì)多"關(guān)聯(lián)關(guān)系,Customer方對(duì)應(yīng)多個(gè)Order方,所以Customer包含一個(gè)集合用于存儲(chǔ)多個(gè)Order,Order包含一個(gè)Customer用于儲(chǔ)存關(guān)聯(lián)自己的Customer。

一對(duì)多關(guān)聯(lián)關(guān)系有一種特例:自身一對(duì)多關(guān)聯(lián)。例如:

自身一對(duì)多關(guān)聯(lián)自身的hbm文件設(shè)置:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.       
  4.     <hibernate-mapping> 
  5.         <class name="com.suxiaolei.hibernate.pojos.Category" table="category"> 
  6.             <id name="id" type="string"> 
  7.                 <column name="id"></column> 
  8.                 <generator class="uuid"></generator> 
  9.             </id> 
  10.               
  11.             <property name="name" column="name" type="string"></property> 
  12.               
  13.             <set name="chidrenCategories" cascade="all" inverse="true"> 
  14.                 <key column="category_id"></key> 
  15.                 <one-to-many class="com.suxiaolei.hibernate.pojos.Category"/> 
  16.             </set> 
  17.               
  18.             <many-to-one name="parentCategory" class="com.suxiaolei.hibernate.pojos.Category" column="category_id"> 
  19.             </many-to-one> 
  20.               
  21.         </class> 
  22.     </hibernate-mapping> 

外鍵存放父親的主鍵。

第二種關(guān)聯(lián)關(guān)系:多對(duì)多

多對(duì)多關(guān)系也很常見,例如學(xué)生與選修課之間的關(guān)系,一個(gè)學(xué)生可以選擇多門選修課,而每個(gè)選修課又可以被多名學(xué)生選擇。數(shù)據(jù)庫中的多對(duì)多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對(duì)多轉(zhuǎn)化為兩個(gè)一對(duì)多。

數(shù)據(jù)表間多對(duì)多關(guān)系如下圖:

多對(duì)多關(guān)系在hbm文件中的配置信息:

學(xué)生:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="com.suxiaolei.hibernate.pojos.Student" table="student"> 
  5.         <id name="id" type="integer"> 
  6.             <column name="id"></column> 
  7.             <generator class="increment"></generator> 
  8.         </id> 
  9.  
  10.         <property name="name" column="name" type="string"></property> 
  11.  
  12.         <set name="courses" inverse="false" cascade="save-update" table="student_course"> 
  13.             <key column="student_id"></key> 
  14.             <many-to-many class="com.suxiaolei.hibernate.pojos.Course" 
  15.                 column="course_id"></many-to-many> 
  16.         </set> 
  17.     </class> 
  18. </hibernate-mapping> 

課程:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="com.suxiaolei.hibernate.pojos.Course" table="course"> 
  5.         <id name="id" type="integer"> 
  6.             <column name="id"></column> 
  7.             <generator class="increment"></generator> 
  8.         </id> 
  9.  
  10.         <property name="name" column="name" type="string"></property> 
  11.  
  12.         <set name="students" inverse="true" cascade="save-update" table="student_course"> 
  13.             <key column="course_id"></key> 
  14.             <many-to-many class="com.suxiaolei.hibernate.pojos.Student" 
  15.                 column="student_id"></many-to-many> 
  16.         </set> 
  17.     </class> 
  18. </hibernate-mapping> 

其實(shí)多對(duì)多就是兩個(gè)一對(duì)多,它的配置沒什么新奇的相對(duì)于一對(duì)多。在多對(duì)多的關(guān)系設(shè)計(jì)中,一般都會(huì)使用一個(gè)中間表將他們拆分成兩個(gè)一對(duì)多。<set>標(biāo)簽中的"table"屬性就是用于指定中間表的。中間表一般包含兩個(gè)表的主鍵值,該表用于存儲(chǔ)兩表之間的關(guān)系。由于被拆成了兩個(gè)一對(duì)多,中間表是多方,它是使用外鍵關(guān)聯(lián)的,<key>是用于指定外鍵的,用于從中間表取出相應(yīng)的數(shù)據(jù)。中間表每一行數(shù)據(jù)只包含了兩個(gè)關(guān)系表的主鍵,要獲取與自己關(guān)聯(lián)的對(duì)象集合,還需要取出由外鍵所獲得的記錄中的另一個(gè)主鍵值,由它到對(duì)應(yīng)的表中取出數(shù)據(jù),填充到集合中。<many-to-many>中的"column"屬性是用于指定按那一列的值獲取對(duì)應(yīng)的數(shù)據(jù)。

例如用course表來說,它與student表使用一個(gè)中間表student_course關(guān)聯(lián)。如果要獲取course記錄對(duì)應(yīng)的學(xué)生記錄,首先需要使用外鍵"course_id"從student_course表中取得相應(yīng)的數(shù)據(jù),然后在取得的數(shù)據(jù)中使用"student_id"列的值,在student表中檢索出相關(guān)的student數(shù)據(jù)。其實(shí),為了便于理解,你可以在使用course表的使用就把中間表看成是student表,反之亦然。這樣就可以使用一對(duì)多的思維來理解了,多方關(guān)聯(lián)一方需要外鍵那么在本例子中就需要"course_id"來關(guān)。

第三種關(guān)聯(lián)關(guān)系:一對(duì)一

一對(duì)一關(guān)系就球隊(duì)與球隊(duì)所在地之間的關(guān)系,一支球隊(duì)僅有一個(gè)地址,而一個(gè)地區(qū)也僅有一支球隊(duì)(貌似有點(diǎn)勉強(qiáng),將就下吧)。數(shù)據(jù)表間一對(duì)一關(guān)系的表現(xiàn)有兩種,一種是外鍵關(guān)聯(lián),一種是主鍵關(guān)聯(lián)。圖示如下:

一對(duì)一外鍵關(guān)聯(lián):

 

一對(duì)一主鍵關(guān)聯(lián):要求兩個(gè)表的主鍵必須完全一致,通過兩個(gè)表的主鍵建立關(guān)聯(lián)關(guān)系:

一對(duì)一外鍵關(guān)聯(lián)在hbm文件中的配置信息:

地址:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="com.suxiaolei.hibernate.pojos.Adress" table="adress"> 
  5.         <id name="id" type="integer"> 
  6.             <column name="id"></column> 
  7.             <generator class="increment"></generator> 
  8.         </id> 
  9.  
  10.         <property name="city" column="city" type="string"></property> 
  11.           
  12.         <one-to-one name="team" class="com.suxiaolei.hibernate.pojos.Team" cascade="all"></one-to-one> 
  13.  
  14.     </class> 
  15. </hibernate-mapping> 

球隊(duì):

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="com.suxiaolei.hibernate.pojos.Team" table="team"> 
  5.         <id name="id" type="integer"> 
  6.             <column name="id"></column> 
  7.             <generator class="increment"></generator> 
  8.         </id> 
  9.  
  10.         <property name="name" column="name" type="string"></property> 
  11.           
  12.         <many-to-one name="adress" class="com.suxiaolei.hibernate.pojos.Adress" column="adress_id" unique="true"></many-to-one> 
  13.  
  14.     </class> 
  15. </hibernate-mapping> 

一對(duì)一外鍵關(guān)聯(lián),其實(shí)可以看做是一對(duì)多的一種特殊形式,多方退化成一。多方退化成一只需要在<many-to-one>標(biāo)簽中設(shè)置"unique"="true"。

一對(duì)一主鍵關(guān)聯(lián)在hbm文件中的配置信息:

地址:

  1. <hibernate-mapping> 
  2.     <class name="com.suxiaolei.hibernate.pojos.Adress" table="adress"> 
  3.         <id name="id" type="integer"> 
  4.             <column name="id"></column> 
  5.             <generator class="increment"></generator> 
  6.         </id> 
  7.  
  8.         <property name="city" column="city" type="string"></property> 
  9.           
  10.         <one-to-one name="team" class="com.suxiaolei.hibernate.pojos.Team" cascade="all"></one-to-one> 
  11.  
  12.     </class> 
  13. </hibernate-mapping> 

球隊(duì):

  1. <hibernate-mapping> 
  2.     <class name="com.suxiaolei.hibernate.pojos.Team" table="team"> 
  3.         <id name="id" type="integer"> 
  4.             <column name="id"></column> 
  5.             <generator class="foreign"> 
  6.                 <param name="property">adress</param> 
  7.             </generator> 
  8.         </id> 
  9.  
  10.         <property name="name" column="name" type="string"></property> 
  11.           
  12.         <one-to-one name="adress" class="com.suxiaolei.hibernate.pojos.Adress" cascade="all"></one-to-one> 
  13.  
  14.     </class> 
  15. </hibernate-mapping> 

一對(duì)一主鍵關(guān)聯(lián),是讓兩張的主鍵值一樣。要使兩表的主鍵相同,只能一張表生成主鍵,另一張表參考主鍵。

  1. <generator class="foreign"> 
  2.   <param name="property">adress</param> 
  3. </generator> 

"class"="foreign"就是設(shè)置team表的主鍵參照adress屬性的主鍵值。

原文鏈接:http://www.cnblogs.com/otomedaybreak/archive/2012/01/20/2327695.html

【編輯推薦】

  1. Hibernate中inverse屬性與cascade屬性
  2. Hibernate復(fù)合主鍵映射
  3. Hibernate繼承映射
  4. Hibernate事務(wù)與并發(fā)問題處理
  5. 讓Hibernate顯示SQL語句的綁定參數(shù)值
責(zé)任編輯:林師授 來源: 音①曉的博客
相關(guān)推薦

2009-09-25 12:59:52

Hibernate映射

2009-09-25 15:34:42

Hibernate關(guān)聯(lián)

2012-02-08 13:34:08

HibernateJava

2009-07-02 09:40:14

Hibernate的繼

2009-06-02 14:46:26

Hibernate關(guān)系映射教程

2009-09-25 10:22:35

Hibernate多表

2009-09-25 10:47:25

Hibernate延遲

2009-09-23 13:26:10

Hibernate對(duì)象

2012-02-08 12:17:38

HibernateJava

2009-06-18 14:22:06

Hibernate多對(duì)Hibernate

2010-07-08 15:28:39

UML類圖依賴關(guān)系

2010-07-09 15:29:51

UML類關(guān)系

2012-02-06 13:52:32

HibernateJava

2012-03-21 11:43:41

JavaHibernate

2010-06-12 15:04:43

UML關(guān)聯(lián)

2010-07-07 10:54:53

UML關(guān)聯(lián)關(guān)系

2010-07-08 14:58:29

UML類圖關(guān)系

2009-09-24 14:28:23

Hibernate抓取

2009-06-04 10:34:19

Hibernate一對(duì)一對(duì)多關(guān)系配置

2009-06-17 15:52:23

Hibernate查詢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91精品国产一区二区在线观看 | 精品国产成人 | 欧美一级黑人aaaaaaa做受 | 欧美自拍第一页 | 亚洲永久| 欧美 日韩 在线播放 | 亚洲影音先锋 | 欧美一区二区三区在线观看 | 日韩一区二区av | 免费高清成人 | 天天综合久久 | 欧美激情免费在线 | 精品国产一区二区三区性色av | 性国产xxxx乳高跟 | 91精品国产91 | 久久久精品国产 | 在线 丝袜 欧美 日韩 制服 | 亚洲精品久久久久久首妖 | 午夜视频在线观看网址 | 国产一区二区三区久久久久久久久 | 日韩精品免费看 | 天天干狠狠操 | 久久精品网| 午夜影院在线观看 | 视频一区二区三区中文字幕 | 亚洲综合成人网 | 久久久999成人 | 久久99精品久久久久久 | 免费h视频 | 亚洲一区国产精品 | 99视频免费播放 | 亚洲国产成人在线视频 | 特一级毛片 | 蜜臀久久99精品久久久久野外 | 毛片av免费在线观看 | 成人深夜福利 | 爱爱小视频 | 狠狠久久综合 | 精品欧美一区二区三区久久久 | 91一区二区 | 国产在线精品一区二区 |