Hibernate一對多,多對一,多對多,一對一關系匯總

openkk 13年前發布 | 4K 次閱讀

  Hibernate如果上手了,那么在Hibernate中的一對多,多對一,多對多,一對一這些關系,應該很快能理解.

  下面就把這幾種關系簡單說一下.

  本文中用到的三個實例化類分別為Customer(保存客戶基本信息),CustomerDetails(保存客戶詳細信息),CustomerBack(中間表,保存兩表之間的關聯)

  對應的表功能同上.說明中的主表指Customer,子表指CustomerDetails,中間表指CustomerBack

  一對多

  ﹤set name="CustomerDetails"table="customer_details"inverse="false" cascade="all"sort="unsorted" ﹥

  ﹤key column="cust_Id"/﹥ ﹤one tomanyclass="com.hibernate.otm.CustomerDetails"/﹥ ﹤/set﹥

  這段代碼是需要放在一對多中的主表配置中的

  name:集合屬性的名稱(也可以理解為一對多中那個子屬性名)

  table(可選,默認為屬性的名稱):集合表的名稱(可理解為一對多中子表的名稱)

  inverse(可選,默認為false):標記這個集合作為雙向關聯關系中的方向的一端

  cascade(可選:默認為none):讓操作級聯到子實體

  sort(可選):指定集合的排序順序

  其它如schema,lazy,order–by,where,outer–join,batch–size,access請參照有關書籍.

  key 中的column=”cust_Id”,cust_Id并不是主表的字段,而是子表中保存主表的字段.

  如主表主鍵為cust_Id,子表中為了保存主表的主鍵,也建一個cust_Id,key里的cust_Id就是指子表中的cust_Id.

  one–to–many 中的class為一對多的子表實例類.

  多對一

  ﹤many to one

  name="Customer"

  class="Customer"

  cascade="all"

  outer join="false"

  update="false"

  insert="false"

  column="cust_Id"

  not null="true"/﹥

  多對一

  中,沒有像一對多的,而是直接用了many–to–one.這段代碼是需要放在多對一中的子表配置中的(即CustomerDetails的配置中)

  outer–join:為外鏈接

  update,insert:指定對應的字段是否在用于UPDATE和/或INSERT的SQL語句中包含.

  column:關聯的字段名.(多對主類對應的字段名)

  not–null:是否為null.

  多對多

  ﹤set name="CustomerBack" table="customer_back" cascade="all"﹥﹤keycolumn="cust_Id"/﹥ ﹤many to manyclass="CustomerDetails"column="custD_id"/﹥ ﹤/set﹥

  多對多

  的配置與一對多有點類似.這段代碼放的位置也是與一對多的代碼放的位置一樣.

  多對多

  關系中,多采用中間表來關聯兩個有多多關系的表的.如Customer與CustomerDetails存在多對多的關系,那么往往是用另外一個表如CustomerBack表來保存它們的關系的,也就是中間表.

  name:屬性的名稱(可理解為中間表的名稱)

  table:表的名稱(可理解為中間表的表名稱)

  key里的cust_Id,是指中間表的cust_Id,為了保存Customer與CustomerDetails的關系,中間表中分別建了cust_Id(Customer的主鍵)與custD_Id(CustomerDetails的主鍵)

  many–to–many中的Class是指多對多中的另一個實例化類,column是指CustomerDetails與中間表關聯的字段名.這里是指中間表的

  custD_Id,不能理解為CustomerDetails的主鍵.

  一對一

  ﹤one to one name="CustomerDetails"class="CustomerDetails"cascade="all" /﹥

  一對一

  的關系更簡單.

  在Customer表的配置中放上這段代碼就行了.

  name:屬性名稱

  class:關聯的實例化類名

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!