delelte方法從某種程度上來講和update方法很相似,特別是對傳入實例的要求,只要所傳入實例的OID在數據庫中有對應的記錄便可,不然Hibaernate就會拋出異常。咱們仍是從對象可以處於的3個狀態來一一闡述。數據庫
1.傳入實例是臨時狀態。通常來講這是不規範的操做,固然你必需要人爲的給它指定OID,並且這個OID必須和數據庫中的一條記錄對應。api
2.傳入實例是遊離狀態。前面咱們說過,遊離狀態與臨時狀態的最大區別就是在數據庫中可能存在一條記錄與之對應,所以若是這個遊離的實例不存在與之對應的數據庫記錄,Hibernate就會拋出異常。緩存
3.傳入實例是持久化狀態。嘿嘿,這種狀況就不用說了吧。session
總之,對於遊離狀態而言,delete方法從數據庫中刪除與它對應的記錄(前提是有這條記錄,不然異常);對於持久化對象而言,delete方法從數據庫中刪除與它對應的對象,而且把它從session的緩存中刪除,此時狀態變爲臨時狀態。ide
下圖簡單的展現了對象的狀態變化圖:spa
圖中各個方法的詳細說明能夠在Hibernate發佈包中的api文檔中找到,這裏就不贅述了,^_^。orm