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,把数据从数据库中删除