Id的生成方式爲assigned的狀況
當咱們調用了session.delete(UserModel)後:
1:根據model的主鍵在數據庫裏面查找數據,來保證對象的存在,而後把找到的對象放到內存裏面,若是此時在hibernate的實例池中已經存在對應的實體對象(注意:代理對象不算實體對象),就拋出例外。
2:若是此時在hibernate的實例池中不存在對應的實體對象,那麼就把對象放到內存裏面,但會標識成待刪除的對象,就不能夠被load等使用了。
3:若是對象仍是不存在,那麼就直接返回了(注意,這個時候是不拋出例外的)。也就是說,delete以前會執行一個查詢語句。
4:客戶端提交事務或者刷新內存
5:判斷待刪除的PO是否存在,存在才須要刪除,不然不須要刪除
6:若是要刪除,才執行如下的步驟。先根據model類型和cfg.xml中映射文件的註冊來找到相應的hbm.xml文件
7:根據hbm.xml文件和model來動態的拼sql,以下:
delete from 表名(來自hbm.xml) where 主鍵=值(來自model)
8:真正用JDBC執行sql,把數據從數據庫中刪除