我的 O/R Mapping 之旅(四)

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

市場是無情的,機遇和危機無處不在。張三在經歷過生意紅火之後,接下來的一年內生意場上連連告負,不得不把自己的攤子收縮一下。這第一件事要把跑運輸的車賣掉,就是那輛牌照爲“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://blog.csdn.net/rosen

      

(請注意!引用、轉貼本文應註明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章