最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

hibernate一對(duì)多關(guān)聯(lián)映射學(xué)習(xí)小結(jié)

 更新時(shí)間:2017年09月11日 10:26:36   作者:動(dòng)力節(jié)點(diǎn)  
這篇文章主要介紹了hibernate一對(duì)多關(guān)聯(lián)映射學(xué)習(xí)小結(jié),需要的朋友可以參考下

一對(duì)多關(guān)聯(lián)映射 

映射原理 

      一對(duì)多關(guān)聯(lián)映射和多對(duì)一關(guān)聯(lián)映射的映射原理是一致的,都是在多的一端加入一個(gè)外鍵,指向一的一端。關(guān)聯(lián)關(guān)系都是由多端維護(hù),只是在寫(xiě)映射時(shí)發(fā)生了變化。 

多對(duì)一和一對(duì)多的區(qū)別

  多對(duì)一和一對(duì)多的區(qū)別在于維護(hù)的關(guān)系不同:

(1)多對(duì)一:多端維護(hù)一端的關(guān)系,在加載多端時(shí),可以將一端加載上來(lái)。

(2)一對(duì)多:一端維護(hù)多端的關(guān)系,在加載一端時(shí),可以將多端加載上來(lái)。 

分類

一對(duì)多單向關(guān)聯(lián)映射 

對(duì)象模型      

    

      從對(duì)象模型中,我們可以看出,Group持有User的一個(gè)引用。由于是單向關(guān)聯(lián),所以數(shù)據(jù)在加載Group時(shí),會(huì)把User加載上來(lái),但是User并不知道Group的存在。

       我們先看一下Group和User的實(shí)體,以及映射文件。

Group

package com.bjpowernode.hibernate; 
import java.util.Set; 
public class Group { 
 private int id; 
 private String name; 
 private Set users; 
  
 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 Set getUsers() { 
  return users; 
 } 
 public void setUsers(Set users) { 
  this.users = users; 
 } 
} 

User

package com.bjpowernode.hibernate; 
public class User { 
 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

<?xml version=1.0"?> 
<!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.bjpowernode.hibernate.User" table="t_user"> 
  <id name="id"> 
   <generator class="native"/> 
  </id> 
  <property name="name"/> 
 </class> 
</hibernate-mapping> 

Group.hbm.xml

<?xml version="1.0"?> 
<!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.bjpowernode.hibernate.Group" table="t_group"> 
  <id name="id"> 
   <generator class="native"/> 
  </id> 
  <property name="name"/> 
  <!-- users屬性,表達(dá)的是本對(duì)象與User的一對(duì)多的關(guān)系 --> 
  <set name="users"> 
    <!--當(dāng)前表(Group)的主鍵--> 
   <key column="groupid"/> 
   <one-to-many class="com.bjpowernode.hibernate.User"/> 
  </set> 
 </class> 
</hibernate-mapping> 

生成的表結(jié)構(gòu)和測(cè)試數(shù)據(jù)

缺點(diǎn) 

1)因?yàn)槎喽薝ser不知道Group的存在(也就是User不維護(hù)與Group的關(guān)系),所以在保存User時(shí),關(guān)系字段groupId為null,如果該字段設(shè)置為非空,則將無(wú)法保存數(shù)據(jù)。

2)因?yàn)閁ser不維護(hù)關(guān)系,而Group維護(hù)關(guān)系,Group就會(huì)發(fā)出多余的update語(yǔ)句,保證Group和User有關(guān)系,這樣加載Group時(shí)才把該Users對(duì)應(yīng)的用戶加載上來(lái)。 

一對(duì)多雙向關(guān)聯(lián)映射

對(duì)象模型       

  

        雙向關(guān)聯(lián)映射對(duì)比單向關(guān)聯(lián)映射,對(duì)象的加載方向由單向變成了雙向。 

我們看一下Group和User的實(shí)體,映射文件

Group

package com.bjpowernode.hibernate; 
import java.util.Set; 
public class Group { 
 private int id; 
 private String name; 
 private Set users; 
 
 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 Set getUsers() { 
  return users; 
 } 
 public void setUsers(Set users) { 
  this.users = users; 
 } 
} 

User

package com.bjpowernode.hibernate; 
public class User { 
 private int id; 
 private String name; 
 private Group groups; 
 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 getGroups() { 
  return groups; 
 } 
 public void setGroups(Group groups) { 
  this.groups = groups; 
 } 
} 

Group.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.bjpowernode.hibernate"> 
 <class name="Group" table="t_group"> 
  <id name="id"> 
   <generator class="native"/> 
  </id> 
  <property name="name"/> 
  <!-- 影響控制反轉(zhuǎn):inverse="false",多的一端維護(hù)關(guān)系,讓一的一端失效 --> 
  <set name="users" inverse="true"> 
   <key column="groupid" not-null="true"/> 
   <one-to-many class="User"/> 
  </set> 
 </class> 
</hibernate-mapping> 

User.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.bjpowernode.hibernate"> 
 <class name="User" table="t_user"> 
  <id name="id"> 
   <generator class="native"/> 
  </id> 
  <property name="name"/> 
  <!-- groups屬性,表達(dá)的是本對(duì)象與Group的多對(duì)一的關(guān)系 --> 
  <many-to-one name="groups" class="Group" column="groupid"/> 
 </class> 
</hibernate-mapping> 

生成的表和測(cè)試數(shù)據(jù) 

一對(duì)多雙向關(guān)聯(lián)的映射方式:

 1)在一的一端的集合上采用<key>標(biāo)簽,在多的一端加入一個(gè)外鍵

 2)在多的一端采用<many-to-one>標(biāo)簽

注意:<key>標(biāo)簽和<many-to-one>標(biāo)簽加入的字段保持一直,否則會(huì)產(chǎn)生數(shù)據(jù)混亂。

inverse屬性:

         inverse屬性可以用在一對(duì)多和多對(duì)多雙向關(guān)聯(lián)上,inverse屬性默認(rèn)為false,為false表示本端維護(hù)關(guān)系,如果inverse為true,則本端不能維護(hù)關(guān)系,會(huì)交給另一端維護(hù)關(guān)系,本端失效。所以一對(duì)多關(guān)聯(lián)映射我們通常在多的一端維護(hù)關(guān)系,讓一的一端失效,所以設(shè)置為inverse為true。

注意:inverse屬性,只影響數(shù)據(jù)的存儲(chǔ),也就是持久化。 

目的 

       一對(duì)多雙向關(guān)聯(lián)映射的目的主要是為了解決一對(duì)多單向關(guān)聯(lián)的缺陷而不是需求驅(qū)動(dòng)的。

總結(jié)

以上所述是小編給大家介紹的hibernate一對(duì)多關(guān)聯(lián)映射學(xué)習(xí)小結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺談Java為什么只能單繼承

    淺談Java為什么只能單繼承

    本文主要介紹了Java為什么只能單繼承,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Springboot整合nacos報(bào)錯(cuò)無(wú)法連接nacos的解決

    Springboot整合nacos報(bào)錯(cuò)無(wú)法連接nacos的解決

    這篇文章主要介紹了Springboot整合nacos報(bào)錯(cuò)無(wú)法連接nacos的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 面試總結(jié):秒殺設(shè)計(jì)、AQS 、synchronized相關(guān)問(wèn)題

    面試總結(jié):秒殺設(shè)計(jì)、AQS 、synchronized相關(guān)問(wèn)題

    Java語(yǔ)言的關(guān)鍵字,當(dāng)它用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼。本文給大家介紹java中 synchronized的用法,對(duì)本文感興趣的朋友一起看看吧
    2021-06-06
  • 基于Eclipse中SVN圖標(biāo)不顯示的解決方法

    基于Eclipse中SVN圖標(biāo)不顯示的解決方法

    本篇文章是對(duì)Eclipse中SVN圖標(biāo)不顯示的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Java創(chuàng)建多線程的8種方式集合

    Java創(chuàng)建多線程的8種方式集合

    這篇文章主要介紹了Java創(chuàng)建多線程的8種方式集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • spring boot mybatis枚舉映射示例代碼

    spring boot mybatis枚舉映射示例代碼

    這篇文章主要給大家介紹了關(guān)于spring boot mybatis枚舉映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MyBatis中OGNL的使用教程詳解

    MyBatis中OGNL的使用教程詳解

    有些人可能不知道MyBatis中使用了OGNL,有些人知道用到了OGNL卻不知道在MyBatis中如何使用,下面這篇文章主要介紹了MyBatis中OGNL的使用教程,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • 詳解Spring Boot 使用slf4j+logback記錄日志配置

    詳解Spring Boot 使用slf4j+logback記錄日志配置

    本篇文章主要介紹了Spring Boot 使用slf4j+logback記錄日志配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳解Java的Hibernate框架中的搜索工具的運(yùn)用

    詳解Java的Hibernate框架中的搜索工具的運(yùn)用

    這篇文章主要介紹了詳解Java的Hibernate框架中的搜索工具的運(yùn)用,Hibernate是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • Java8 Stream對(duì)兩個(gè) List 遍歷匹配數(shù)據(jù)的優(yōu)化處理操作

    Java8 Stream對(duì)兩個(gè) List 遍歷匹配數(shù)據(jù)的優(yōu)化處理操作

    這篇文章主要介紹了Java8 Stream對(duì)兩個(gè) List 遍歷匹配數(shù)據(jù)的優(yōu)化處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08

最新評(píng)論

固镇县| 安多县| 石景山区| 神池县| 德惠市| 西城区| 灵丘县| 徐水县| 赤峰市| 新乐市| 江华| 东乌珠穆沁旗| 军事| 安西县| 稷山县| 凤翔县| 叶城县| 邵阳市| 饶河县| 咸阳市| 兴安县| 木兰县| 固原市| 从化市| 介休市| 云阳县| 饶阳县| 商水县| 青海省| 久治县| 定安县| 吉木萨尔县| 筠连县| 甘南县| 钟山县| 繁峙县| 广德县| 晋宁县| 集安市| 平阴县| 綦江县|