Hibernate的save方法源码初探

来源:互联网 发布:js 添加style属性 编辑:程序博客网 时间:2024/06/07 09:14
 

请看进行了如下总结: 
一、在session的内部缓存中寻找保存对象,如果找到了,则认为此数据已经保存(曾经执行过insert操作),实体对象已经处于 persistent状态,直接返回。此时即使数据相比之前的状态发生了变化,也将在事务提交时由脏数据检查来判定是否需要执行update操作。

二、如果实体对象实现了lifecycle接口,那么将执行待保存对象的onSave()方法。

三、如果实体对象实现了Validatable接口,那么将会执行相应的validate()方法。

四、如果存在拦截器对象,那么将会执行Interceptor.onSave()方法。

五、构造insert SQL语句完成数据保存。

六、数据保存成功后,设定实体对象的id为插入记录的id。

七、将保存后的实体对象纳入Hibernate的内部缓存(一级缓存)。注意Hibernate不会把保存后的实体对象纳入二级缓存,因为刚刚保存过的实体对象很可能在之后被修改,缓存的频繁更新以及带来的同步问题代价,超出了缓存该对象所带来的收益。

八、如果关联关系映射配置了cascade="save-update"属性,save操作对关联对象级联操作。

 

上图:

 

 

序列图:

 

 

 

原创粉丝点击