成都心情

            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            98 隨筆 :: 2 文章 :: 501 評論 :: 1 Trackbacks

          公告

          Creative Commons License
          本作品采用知識共享署名-相同方式共享 2.5 中國大陸許可協議進行許可。 Locations of visitors to this page(15)

          隨筆分類(91)

          隨筆檔案(99)

          文章分類(2)

          友情鏈接

          積分與排名

          • 積分 - 635653
          • 排名 - 74

          最新評論

          閱讀排行榜

          評論排行榜

          接第三部分內容,本章節就要簡單多了。

          市場是無情的,機遇和危機無處不在。張三在經歷過生意紅火之后,接下來的一年內生意場上連連告負,不得不把自己的攤子收縮一下。這第一件事要把跑運輸的車賣掉,就是 那輛牌照為“ A00002”的

          package com.dao;

          import java.util.*;

          import net.sf.hibernate.*;
          import net.sf.hibernate.cfg.*;

          import bo.*;

          public class Test {

          ?AutoInfo ai;
          ?People people;
          ?public void DoTest() {
          ??try {
          ???Configuration cfg = new Configuration().configure();
          ???SessionFactory sessions = cfg.buildSessionFactory();
          ???Session session = sessions.openSession();
          ???Transaction tx = session.beginTransaction();
          ???ai =
          ????(AutoInfo) session.find(
          ?????"from AutoInfo where LICENSE_PLATE='A00002'").get(
          ?????0);
          ???people = ai.getOwnerNo();
          ???people.getAutoInfoSet().remove(ai);
          ???session.delete(ai);
          ???tx.commit();
          ???session.close();
          ??} catch (Exception e) {
          ???System.out.println(e);
          ??}
          ?}
          }


          為什么要從 People 對象中移除某個 AutoInfo 對象?

          ??? 問得好!傳統 JDBC 程序可以直接刪除以“ A00002 ”為條件查詢出的記錄,這樣沒有問題。但如果在 Hibernate 中用同樣的方式直接刪除,會引起不小的麻煩:

          net.sf.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): 2, of class: bo.AutoInfo


          ??? 造成無法刪除的原因是 PEOPLE AUTO_INFO 表存在著一對多( one-to-many )關系,想要從 AUTO_INFO 刪除一條記錄,就必須用 people.getAutoInfoSet().remove(ai) 方法為 People 移除以“ A00002 ”為條件查詢出的 AutoInfo 對象,才能真正刪除該 AutoInfo 對象。

          ??? 從張三的失落中回過頭來,這次 Hibernate 之旅也即將結束了。最后要體驗的是刪除 PEOPLE 表及其關聯的 AUTO_INFO 表。

          package com.dao;

          import java.util.*;

          import net.sf.hibernate.*;
          import net.sf.hibernate.cfg.*;

          import bo.*;

          public class Test {

          ?People people;
          ?public void DoTest() {
          ??try {
          ???Configuration cfg = new Configuration().configure();
          ???SessionFactory sessions = cfg.buildSessionFactory();
          ???Session session = sessions.openSession();
          ???Transaction tx = session.beginTransaction();
          ???people =
          ????(People) session.load(People.class,new Integer(1));
          ???session.delete(people);
          ???tx.commit();
          ???session.close();
          ??} catch (Exception e) {
          ???System.out.println(e);
          ??}
          ?}
          }


          ??? Hibernate 的優勢又一次體現出來。我們只需把一對多( one-to-many )關系中“ one ”這方刪除,與之相關聯的所有其他記錄會一并刪除。

          ??? 最后,通過這次旅程,也算把 Hibernate 的特性體驗了一把。作為一種 O/R Mapping 實現,它是很優秀的,希望我們都可以用好它。



          請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://www.aygfsteel.com/rosen

          posted on 2005-08-12 11:38 Rosen 閱讀(743) 評論(0)  編輯  收藏 所屬分類: O/R Mapping
          主站蜘蛛池模板: 筠连县| 烟台市| 兴义市| 文化| 霍州市| 乐亭县| 石阡县| 张家川| 罗田县| 长武县| 海淀区| 菏泽市| 柘城县| 兴仁县| 饶平县| 白银市| 元江| 龙胜| 会泽县| 新宁县| 孙吴县| 鹤壁市| 金湖县| 安新县| 中卫市| 康马县| 甘孜县| 新乡市| 恭城| 利川市| 沧州市| 小金县| 苏州市| 绥江县| 新绛县| 双柏县| 时尚| 抚松县| 六枝特区| 宁城县| 苏尼特左旗|