Hibernate的save方法源码初探

 

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

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

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

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

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

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

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

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

 

上图:

 

 

序列图:

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值