国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Kodo EJB:實現類和類之間的關聯關系

2019-11-18 11:12:29
字體:
來源:轉載
供稿:網友

  對象和對象之間除了繼續關系之外,還存在著關聯關系:包括分作一對一、一對多、多對一和多對多,由于這幾種關系在Kodo EJB中的實現原理基本類似,因此本文中主要就一對一類關聯關系進行深入的講述,同時通過簡單例子的分析和實踐具體的說明如何使用Kodo EJB中提供的注釋來定義類和類之間的關聯關系,剩下的一對多、多對一和多對多三種關系將只在文章最后進行說明,請讀者參考一對一關系的實現過程。

  面向對象的世界里,類A和類B之間的一對一關系必須滿足如下條件:
  1. 對象A1引用了對象B1

  2. 類A其他對象An不可能應用同樣的對象B1
  在關系數據庫中,我們通常使用唯一外鍵的方式來實現一對一關系,下面這個圖說明了這種的情況。



  下面開始介紹一下Kodo EJB中和一對一關系實現相關的知識,為了說明的需要,我們首先定義一個虛擬的場景。

  模擬場景

  我們假定要完成一個圖書館治理系統,該系統中需要治理很多書,我們需要記錄書的基本信息如編號、書名、出版日期等基本信息,還需要記錄書的前言,序等信息。

  假設我們根據上面的需求,將書設計成一個類(Book),包括了書的編號和名稱兩個屬性,同時將書的前言信息設計成另外一個類(BookExtend),它包括了書的編號和前言信息兩個屬性。由于一本書有前言而且也不可能有其他的書前言部分會和他一樣,所以類Book和BookExtend之間很自然的形成了一對一的關系。這兩個類的屬性以及類之間的關系如下圖所示。



  [注]

  1、為了說明的簡單,例子設計時每個對象僅僅選擇了必要的屬性。

  2、上面的設計僅僅為了演示的要求而特意采用,不代表設計合理。

  Kodo EJB中和一對一關系實現相關的內容

  在Kodo EJB中,我們可以使用簡單的OneToOne注釋來聲明類和類之間的一對一關系,另外可選的,我們可以使用JoinColumn注釋來聲明兩個類對應的表之間使用什么字段來進行關聯。

  OneToOne

  OneToOne注釋提供了5個屬性供開發者定義類和類之間一對一關系的細節內容。
  1. targetEntity

    Class類型的屬性。

    定義關系類的類型,默認是該成員屬性對應的類類型,所以通常不需要提供定義。

  2. mappedBy

    String類型的屬性。

    定義類之間的雙向關系。假如類之間是單向關系,不需要提供定義,假如類和類之間形成雙向關系,我們就需要使用這個屬性進行定義,否則可能引起數據一致性的問題。比如上面的演示場景中,我們只是定義Book類有BookExtend屬性,而BookExtend并沒有Book屬性,那么他們是單向關系,如何BookExtend中也定義了Book屬性,那么Book和BookExtend之間就構成了雙向關系。

  3. cascade

    CascadeType[]類型。

    該屬性定義類和類之間的級聯關系。定義的級聯關系將被容器視為對當前類對象及其關聯類對象采取相同的操作,而且這種關系是遞歸調用的。舉個例子:Book和BookExtend有級聯關系,那么刪除Book時將同時刪除它所對應的BookExtend對象。而假如BookExtend還和其他的對象之間有級聯關系,那么這樣的操作會一直遞歸執行下去。

    cascade的值只能從CascadeType.PERSIST(級聯新建)、CascadeType.REMOVE(級聯刪除)、CascadeType.REFRESH(級聯刷新)、CascadeType.MERGE(級聯更新)中選擇一個或多個。還有一個選擇是使用CascadeType.ALL,表示選擇全部四項。

  4. fatch

    FetchType類型的屬性。

    可選擇項包括:FetchType.EAGER和FetchType.LAZY。前者表示關系類在主類加載的時候同時加載,后者表示關系類在被訪問時才加載。默認值是FetchType.EAGER。

  5. optional

    boolean類型的屬性。

    定義該關聯類對是否必須存在。假如設置為false,那么該屬性就不能設置為null。默認值是true。
  OneToOne用法舉例
public class Book{ // 其他內容… @OneToOne(optional=true,cascade=CascadeType.ALL) public BookExtend bookExtend; } 
  JoinColumn

  JoinColumn注釋用于定義主類在數據庫中對應的表通過什么字段和關系類的主鍵進行關聯,這個注釋是可選的,假如不提供該注釋,Kodo在使用”對象名_ID”和關聯表進行關聯(簡單情況下),比如演示場景中類Book的bookExtend沒有使用JoinColumn注釋進行聲明,我們使用Kodo EJB提供的Mapping Tool工具生成表格的時候,Book類對應的表Book中將自動加入列bookExtend_ID,它的類型將和BookExtend對應表的主鍵字段id類型保持一致。

  JoinColumn注釋中有兩個屬性:name和referencedColumnName屬性。
  1. name

    String類型。

    它用于指定主類對應的表中和關系類的主鍵進行關聯的字段的名稱,比如上例中,我們不希望使用默認的bookExtend_ID字段名進行關聯,我們可以在Book類中使用JoinColumn注釋bookExtend屬性,設置JoinColumn注釋為自己想要的名字比如extendID或者其他。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊金霍洛旗| 衡南县| 酉阳| 安龙县| 绥阳县| 梓潼县| 潍坊市| 韩城市| 东海县| 平度市| 增城市| 连州市| 濉溪县| 丰县| 澄迈县| 耒阳市| 崇左市| 蒙城县| 平乡县| 兴宁市| 云和县| 丹寨县| 鸡西市| 博罗县| 商水县| 海林市| 且末县| 辽中县| 兴国县| 山西省| 连平县| 罗甸县| 余江县| 长白| 读书| 封丘县| 昂仁县| 额尔古纳市| 牙克石市| 谢通门县| 余干县|