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

Hibernate映射解析之關(guān)聯(lián)映射詳解

 更新時間:2017年02月27日 09:54:32   作者:孟祥超  
所謂關(guān)聯(lián)映射就是將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫里,在對象模型中就是一個或多個引用。下面這篇文章詳細的給大家介紹了Hibernate映射解析之關(guān)聯(lián)映射的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。

Hibernate中的關(guān)聯(lián)映射

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

平時開發(fā)中,類與類之間最普遍的的關(guān)系就是關(guān)聯(lián)關(guān)系,而且關(guān)聯(lián)是有方向的。
以部門(Dept)和員工(Employee)為例:一個部門下有多個員工,而一個員工只能屬于一個部門。

從Employee到Dept的關(guān)聯(lián)就是 多對一 關(guān)聯(lián)。 這就說明 每個Employee對象只會引用一個Dept對象,因此在Employee類中應(yīng)該定義一個Dept類型的屬性,來引用所關(guān)聯(lián)的Dept對象。

從Dept到Employee的關(guān)聯(lián)就是 一對多 關(guān)聯(lián)。這就說明 每個Dept對象會引用一組Employee對象,因此應(yīng)該在Employee類中定義一個集合類型的屬性,來引用所有關(guān)聯(lián)的Employee對象。

如果僅有從Employee到Dept的關(guān)聯(lián)或者僅有從Dept到Employee的關(guān)聯(lián),就稱為單向關(guān)聯(lián)。
如果同時包含兩種關(guān)聯(lián),就是雙向關(guān)聯(lián)。

單向關(guān)聯(lián)

雙向關(guān)聯(lián)

配置多對一的關(guān)聯(lián)關(guān)系

  1. 以員工和部門為例,配置 員工到部門的單向多對一關(guān)聯(lián)
  2. 在Employee類中定義Dept類型的屬性 dept;

配置文件中配置 使用'many-to-one'進行配置

private Integer id;
private String name;
private Integer age;
private Integer sex;
private Dept dept; //引用所屬的部門

映射文件

<many-to-one name="dept" column="dept" class="com.ytzl.demo.entity.Dept" cascade="save-update"></many-to-one>
  1. name :屬性名 這里就是 Employee中的dept
  2. column:外鍵字段 ,這里就是Employee表里的dept字段
  3. class :dept屬性對應(yīng)的類型 ,這里是 Dept類
  4. cascade:級聯(lián)操作 這里是 保存和修改

配置一對多的關(guān)聯(lián)關(guān)系

以員工和部門為例 ,從部門到員工的關(guān)聯(lián)就是 一對多的關(guān)聯(lián)

  1. 在Dept類中增加集合屬性用來保存所引用的員工對象
  2. 在映射文件中配置 set

修改類屬性

private Integer id;
private String name;
private Set<Employee> employees = new HashSet<>(); //用來保存員工引用

修改映射文件

<!-- 配置一對多的關(guān)聯(lián) -->
<set name="employees"> <!-- name 對應(yīng)的屬性名 就是集合的名字 -->
 <key column="dept"></key> <!-- 對應(yīng)的是 employee表的外鍵字段名 -->
 <one-to-many class="com.ytzl.demo.entity.Employee"/> <!-- 關(guān)聯(lián)的類 這里是 員工類 -->
</set>
  1. name :屬性名 ,集合屬性的名字
  2. key元素:column 屬性 設(shè)定與所關(guān)聯(lián)的持久化類對應(yīng)的表的外鍵,這里是employee表的dept外鍵字段名
  3. one-to-many :class屬性指定關(guān)聯(lián)的持久化類 這里對應(yīng)的是員工類

cascade 屬性 關(guān)聯(lián)操作

用于指定如何操作與當(dāng)前對象關(guān)聯(lián)的其他對象

可選值:

  1. none :默認值 ;不關(guān)聯(lián)其他的對象
  2. save-update 當(dāng)通過Session執(zhí)行 save() ,update()saveOrUpdate()方法的時候級聯(lián)更新或者保存所關(guān)聯(lián)的對象
  3. delete :當(dāng)通過session的delete()刪除當(dāng)前對象時,會級聯(lián) 刪除關(guān)聯(lián)對象;
  4. all :包含 delete,save-update的行為

inverse屬性 反轉(zhuǎn)屬性

在hibernate中,'inverse'屬性指定了關(guān)聯(lián)關(guān)系中的方向。

關(guān)聯(lián)關(guān)系中,'inverse=”false”‘的為主動方,由主動方負責(zé)維護關(guān)聯(lián)關(guān)系。

order-by屬性 指定集合內(nèi)元素的排序順序

這里以員工和部門為例,部門內(nèi)的員工要以年齡倒序的順序排序,就可以通過設(shè)置 order-by屬性

order-by="age desc"

多對多關(guān)聯(lián)

以 員工和項目為例,一個員工可以參與到多個項目中,每個項目有多個員工的參于

  1. 配置 Project類 ,在類中添加集合屬性 用于保存員工引用
  2. 配置Employee類,在類中添加集合睡醒,用于保存項目引用

往往多對多映射涉及到第三張表

Project類

private Integer id;
private String name;
private Set<Employee> employees = new HashSet<>();

配置Project映射類

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping>
 <class name= "com.ytzl.demo.entity.Project" table ="project" dynamic-update="true">
 <id name="id" column="p_id" type="java.lang.Integer">
 <generator class="increment"></generator>
 </id>
 <property name="name" column="p_name" type="java.lang.String"></property>
 <set name="employees" table="emp_pro_relate" cascade="save-update">
 <key column="pro_id"></key>
 <many-to-many class="com.ytzl.demo.entity.Employee" column="emp_id"></many-to-many>
 </set>
 </class>
 </hibernate-mapping>
  1. set元素的table屬性 對應(yīng)第三張關(guān)聯(lián)表
  2. key元素的column屬性 對應(yīng)project表在第三張表的外鍵
  3. many-to-many 元素 column對應(yīng)關(guān)聯(lián)對象在第三張表的外鍵

Employee類

private Integer id;
private String name;
private Integer age;
private Integer sex;
private Dept dept; //引用所屬的部門
private Set<Project> projects = new HashSet<>(); //保存項目引用

Employee映射文件

<set name="projects" table="emp_pro_relate" inverse="true">
 <key column="emp_id"></key>
 <many-to-many class="com.ytzl.demo.entity.Project" column="pro_id"></many-to-many>
</set>

延遲加載

當(dāng)hibernate從數(shù)據(jù)庫中加載Dept對象時,如果同時加載所有關(guān)聯(lián)的Employee對象,而我們僅僅需要Dept對象,那么這些關(guān)聯(lián)的對象就白白浪費了許多內(nèi)存空間,這時就有了延遲加載,如果實際需要用到Employee時再去加載。hibernate使用lazy屬性指定延遲加載的查詢策略

hibernate允許在對象-關(guān)系映射文件中配置加載策略

級別 說明
類級別 元素中l(wèi)azy屬性可選值為 true(延遲加載)和false(立即加載);默認值是true;
一對多關(guān)聯(lián)級別 元素中l(wèi)azy屬性的可選值為 :true(延遲加載) ,extra(增強延遲加載),false(立即加載) 默認值為 true
多對一關(guān)聯(lián)級別 元素中l(wèi)azy屬性的可選值為 :proxy(延遲加載),no-proxy(無代理延遲加載),和false(立即加載) ;默認值為 proxy

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 關(guān)于IDEA配置文件字符集的問題

    關(guān)于IDEA配置文件字符集的問題

    這篇文章主要介紹了關(guān)于IDEA配置文件字符集的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 安裝多個版本JDK后使用時的切換方法總結(jié)

    安裝多個版本JDK后使用時的切換方法總結(jié)

    我們平時在window上做開發(fā)的時候,可能需要同時開發(fā)兩個甚至多個項目,有時不同的項目對JDK的版本要求有區(qū)別,下面這篇文章主要給大家介紹了安裝多個版本JDK后使用的切換方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Java遞歸 遍歷目錄的小例子

    Java遞歸 遍歷目錄的小例子

    Java遞歸 遍歷目錄的小例子,需要的朋友可以參考一下
    2013-03-03
  • mybatis?mapper.xml?注釋帶參數(shù)的坑及解決

    mybatis?mapper.xml?注釋帶參數(shù)的坑及解決

    這篇文章主要介紹了mybatis?mapper.xml?注釋帶參數(shù)的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java生成二維碼并且給二維碼添加logo

    java生成二維碼并且給二維碼添加logo

    這篇文章主要介紹了java生成二維碼并且給二維碼添加logo的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot詳解如何整合Redis緩存驗證碼

    SpringBoot詳解如何整合Redis緩存驗證碼

    本文主要介紹了SpringBoot集成Redis實現(xiàn)驗證碼的緩存簡單案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • spring boot security自定義認證的代碼示例

    spring boot security自定義認證的代碼示例

    這篇文章主要介紹了spring boot security自定義認證,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java SpringMVC 集成靜態(tài)資源的方式你了解嗎

    Java SpringMVC 集成靜態(tài)資源的方式你了解嗎

    本篇文章主要介紹了SpringMVC集成靜態(tài)資源的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • springboot 如何配置多個jndi數(shù)據(jù)源

    springboot 如何配置多個jndi數(shù)據(jù)源

    這篇文章主要介紹了springboot 如何配置多個jndi數(shù)據(jù)源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • hibernate增刪改查操作代碼

    hibernate增刪改查操作代碼

    這篇文章主要介紹了hibernate增刪改查操作代碼,需要的朋友可以參考下
    2017-09-09

最新評論

兴文县| 颍上县| 正阳县| 沧州市| 台湾省| 天全县| 桂东县| 武川县| 偃师市| 吉水县| 观塘区| 探索| 大姚县| 宣汉县| 镇赉县| 察隅县| 济宁市| 股票| 文登市| 昌江| 南陵县| 班玛县| 武乡县| 永定县| 宜兰县| 新乡市| 进贤县| 建德市| 揭东县| 合山市| 克什克腾旗| 海林市| 夹江县| 忻城县| 平乐县| 渭源县| 扶余县| 洪洞县| 嘉义县| 卢湾区| 垣曲县|