Hiberate3 Session缓存简介
创始人
2024-06-07 14:50:47
0
Hiberate3有很多值得学习的地方,这里我们主要介绍Hiberate3 Session缓存,包括介绍List()和iterate 查询区别等方面。

1.Hiberate3 Session缓存,它同session邦定。它的生命周期和session相同。Session消毁,它也同时消毁;管理一级缓存,一级缓存无法取消,用两个方法管理,clear(),evict()

2.两个session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁;

3.Hiberate3 Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!

4.iterate 查询使用缓存,会发出查询Id的SQL和HQL语句,但不会发出查实体的,它查询完会把相应的实体放到缓存里边,一些实体查询如果缓存里边有,就从缓存中查询,但还是会发出查询id的SQL和HQL语句。如果缓存中没有它会数据库中查询,然后将查询到的实体一个一个放到缓存中去,所以会有N+1问题出现。

5.List()和iterate 查询区别:

使用iterate,list查询实体对象*N+1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题,所谓的N+1是在查询的时候发出了N+1条sql语句1:首先发出一条查询对象id列表的sqlN:

根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句list和iterate的区别?

list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据。iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题

6.Get()和load(),iterate方法都会使用一级缓存,

7.hiberate3 session 存储过程如下:

例如 object 对象

◆Session.save(object);

这时候不会把数据放到数据库,会先放到session缓存中去,数据库中没有相应记录,

◆session.flush();才发SQL和HQL语句,数据库中有了相应记录,

但是数据库用select查不到,这是跟数据库事物级别有关系。

◆Session.beginTrransaction()。commit();

事物提交后可以查询到了。

◆Session.flush()语句但是为什么不写呢,因为commit()会默认调用flush();

【编辑推荐】

  1. iBATIS与Hibernate间的取舍
  2. JDBC与Hibernate读取性能分析
  3. 浅析NHibernate一对一映射的延迟加载
  4. 使用Hibernate 3二级缓存的四个经验
  5. MySQL存储过程中的Hibernate JDBC

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...