接第三部分內容,本章節就要簡單多了。
市場是無情的,機遇和危機無處不在。張三在經歷過生意紅火之后,接下來的一年內生意場上連連告負,不得不把自己的攤子收縮一下。這第一件事要把跑運輸的車賣掉,就是
那輛牌照為“
A00002”的
。 package com.dao; import java.util.*; import net.sf.hibernate.*; import bo.*; public class Test { ?AutoInfo ai;
import net.sf.hibernate.cfg.*;
?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 bo.*; public class Test { ?People people;
import net.sf.hibernate.cfg.*;
?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