hibernate通过Session来操作对象

Session概述

在这里插入图片描述

Session缓存

在这里插入图片描述
执行了两次查询,但是却只是执行了一次sql语句

一级缓存

在这里插入图片描述

操作Session缓存

在这里插入图片描述

flush 使得数据表中的记录和Session缓存中的对象的状态保持一致,为了保持一致,可能会发送对应的SQL语句

1.在Transation的commit方法中 ,先调用session的flush方法.再提交事务
2.flush 可能会发送SQL语句 ,但不会提交事务
3.注意
1) 在未提交事务或显示调用Session.flush()方法之前,也有可能会进行flush操作
执行HQL或QBC查询 会先进行flush操作,以得到数据表最新的记录
若记录的id是由底层数据库使用自增的方式生成的,则在调用save()方法后,就会立即发送insert语句 因为save方法后,必须保证对象的id是存在的
在这里插入图片描述

reflush 会强制发送select语句,以使得session缓存对象的状态和数据表中对应的记录保持一致

几种方法

save( ) 保存对象
persist() 会执行insert操作 和save的区别 在persist之前若对象已经有id了则不会执行insert 而会抛出一个异常 save不会 save会直接insert

get() 加载一个对象 立即检索
load() 延迟检索
区别:
1.执行get方法会立即加载对象,执行load方法,若不使用该对象则不会立即执行查询语句,而是返回一个动态代理对象(延迟加载)
2.若数据表中没有对应的记录 get返回null load 抛异常
3.load方法可能会抛出懒加载异常,也就是还没加载的时候session被关闭了,就加载不了了,所以就会抛出这个异常

update()
1.若更新一个持久化对象,不需要显示的调用update方法,因为在调用Transaction的commit方法时,会先执行session的flush方法
2.更新一个游离对象,需要显示的调用session的update方法–>可以把一个游离对象变成一个持久化对象
需要注意的是:
无论更新的游离对象是否和数据表中的数据一样,都会执行update操作
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值