程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Hibernate 關聯映射,hibernate關聯映射

Hibernate 關聯映射,hibernate關聯映射

編輯:JAVA綜合教程

Hibernate 關聯映射,hibernate關聯映射


ORM(Object Relational Mapping)對象/關系映射

   

說到Hibernate的關聯映射就必須要提一提ORM了。那麼ORM是什麼呢,其是一種持久化技術,他在對象模型和關系型數據庫之間建立對象關系,通過操作JavaBean對象來完成對數據庫的操作!

注意:ORM是概念化的並不是實際存在的,可以理解為其是一種編程思想,而Hibernate框架就是該思想的實現產品!

配置Po對象(和數據表綁定的持久化對象)的關聯關系

   

從上面說到ORM可以在對象模型和數據庫之間建立對應關系而在Hibernate中該關系的建立可以通過xml文件來進行配置詳情請參考《hibernate集成》,該關系的建立是ORM持久化技術實現的基礎,有了該關系的配置才可以使ORM持久化技術成為可能!

從《hibernate集成》中我們可以對javaBean進行和數據庫表對應關系的配置但是如果兩張表存在主外建關系比如:員工有所屬的部門在員工表中存在部門編號的外鍵列時又該如何配置?

解決方案1:

   

      按照數據表的結構創建實體類(員工實體類中存放的是部門編號沒有部門名稱)

解決方案2:

   

      在員工實體類中添加部門實體類的引用

   

從上面的兩個解決方案中顯然第二種解決方案要更靠譜一點以為如果是第一種方案的話如果查詢員工信息並且顯示該員工的部門名稱是又該怎麼辦?但是第二種方案中的部門實體類的類型使我們自己定義的類型數據表中並沒有該類型,如何來配置?這時就需要對兩個實體類進行關聯關系的配置了!

配置多對一單項關聯關系

   

上面所遇到的問題就可以通過多對一單項關聯配置來解決。在員工實體類的xml文件配置中將部門實體類的變量進行如下配置:

<many-to-one name="部門實體類變量"   column="員工表中關聯部門表的外鍵列的名稱" 
    class="部門實體類的全名稱(如:cn.wz.entity.Dept)" 
/>

其中<many-to-one>元素建立了員工表和部門表的主外建之間的映射。它主要包含以下屬性:

配置雙向的一對多關聯

  

如果想要在員工實體類中保存其關聯的部門實體類並且部門實體類中保存與之關聯的員工(多個)則可以配置雙向的一對多關聯

在配置多對一單項關聯的基礎上在部門實體類中添加員工實體類集合的屬性並在其xml配置文件中文件添加如下配置:

<set name=”引用員工實體類集合的屬性名稱”>

       <key column=”員工表中與部門表關聯的外鍵列名稱”></key>

        <one-to-many class=”員工實體類的全名稱(如:cn.wz.entity.Emp)”/>

</set>

set元素的name屬性:設定持久化類的屬性名。此處為引用員工實體類集合的屬性名稱。

set元素還包含兩個子元素:

配置單向多對多關聯

  

配置單項多對多關聯與配置一對多關聯類似也是使用set元素,在此時用員工(EMP)和項目(PROJECT)來舉例

如在員工表中保存其參與的多個項目

員工實體類中的代碼如下:

public calss Emp implements java.io.Serializable{ 
    //省略Emp類中的其他屬性 
    private Set<Project> projects=new HashSet<Project>(0); 
    //省略Emp類中的構造 
    //省略getter和setter方法 
}

在其xml配置文件中加入如下配置

<set name=”projects”table=“PROEMP”>

        <key column=”REMPID”/>

        <many-to-many class=”cn.wz.entity.Project”column=”RProjectID”/> 

</set>

其中:

set元素的table屬性指定關系表的名稱為PROJECT

set子元素key元素的column屬性指定PROEMP表的外鍵REMPID,用來參照EMP表

many-to-many子元素的class屬性指定projects集合中存放的是Project對象,cloumn屬性指定PROEMP表的外鍵RProjectID用來參照PROJECT表

配置雙向多對多關聯

  

配置雙向多對多關聯與上面一樣只需將REMPID和RProjectID交換位置即可

注意:在使用多對多關聯時Hibernate會自動在數據庫中創建PROEMP表來連接員工表和項目表該表只有兩列REMPID和RProjectID並且REMPID列為員工表的外鍵、RProjectId為部門表的外鍵

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved