接第三部分內容,本章節就要簡單多了。
市場是無情的,機遇和危機無處不在。張三在經歷過生意紅火之後,接下來的一年內生意場上連連告負,不得不把自己的攤子收縮一下。這第一件事要把跑運輸的車賣掉,就是那輛牌照爲“A00002”的。
package com.dao; import java.util.*; import net.sf.hibernate.*; import bo.*; public class Test { AutoInfo ai; |
爲什麼要從 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; |
Hibernate 的優勢又一次體現出來。我們只需把一對多(one-to-many)關係中“one”這方刪除,與之相關聯的所有其他記錄會一併刪除。
最後,通過這次旅程,也算把 Hibernate 的特性體驗了一把。作爲一種 O/R Mapping 實現,它是很優秀的,希望我們都可以用好它。
(請注意!引用、轉貼本文應註明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen)
(請注意!引用、轉貼本文應註明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen)