初入Hibernate框架

初入Hibernate框架<三>

多表級聯問題:

將外鍵操作也配置進框架:
級聯,1方更新,被關聯的數據也更新
刪除1方,被關聯的數據都刪除

1、cascade級聯操作

所謂cascade,如果有兩個表,在更新一方的時候,可以根據對象之間的關聯關係,對被關聯方進行相應的更新。比如說院系表和學生表之間是一對多關係,使用cascade, 如刪除院系表中的一條院系記錄時,該院系下的所有學生記錄也自動刪除。這種現象稱爲級聯刪除。當創建一個新的院系實例,該院系實例集合屬性中保存有學生。當該院系實例持久化時,自動將集合學生也自動添加到數據庫的學生表中去。這稱爲級聯增加。

在前面的基礎上,用學生與部門表來演示:

//Student.hbm.xml中的<class name="Student" table="students" catalog="hib">屬性中添加:
    <many-to-one name="dept" class="Dept" fetch="select">
            <!-- 配置表中的外鍵 -->
           <column name="deptId" length="8"></column>
        </many-to-one>
//Student.hbm.xml中與Student映射並列:
<class name="Dept" table="depts" catalog="hib">
       <id name="id" type="java.lang.String">
            <column name="id" length="8"></column>
            <generator class="assigned"></generator>
       </id>
       <property name="name" type="java.lang.String">
            <column name="name" length="40"></column>
       </property>
       <!-- cascade="all"對所有進行關聯操作 -->
       <set name="students" table="students" inverse="true" cascade="all">
            <key>
                <column name="deptId"></column><!-- 配置外鍵字段 -->
            </key>
            <one-to-many class="Student"/>
       </set>

    </class>

這裏也可以在寫一個xxx.hbm.xml,然後在src/hibernate.cfg.xml文件中配置

延時加載:

(1) 屬性的延遲加載

   如Person表有一個人員圖片字段(對應java.sql.Clob類型)屬於大數據對象,當我們加載該對象時,我們不得不每一次都要加載這個字段,而不論我們是否真的需要它,而且這種大數據對象的讀取本身會帶來很大的性能開銷。我們可以如下配置我們的實體類的映射文件:

在xxx.hbm.xml配置文件中,

<hibernate-mapping>
 <class name="bean.Person" table="person">
      ……
  <property name="pimage" type="java.sql.Clob" 
                         column="pimage" lazy="true"/>
 </class>
 </hibernate-mapping>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章