当前位置: 首页 > news >正文

Hibernate : Query.list()、Query.iterator()的区别

Query上有list()与iterator()方法,两者的差别在于list()方法在读取数据时,并不会利用到快取,而是直接再向数据库查询,而iterator()则将读取到的数据写到快取,并于读取时再次利用。

来看看下面的程序:

Session session = sessionFactory.openSession();
        
Query query = session.createQuery("from User");
List users = query.list();
users = query.list();

session.close();


这个程序片段会使用两次SQL来查询数据库:

hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_ from user user0_


如果在Session关闭之前,要再将所有数据在取出,可以使用iterator()方法,例如:

Session session = sessionFactory.openSession();

Query query = session.createQuery("from User");
Iterator users = query.iterate();
users = query.iterate();

session.close();


这个程序片段会使用一次SQL向数据库查询,第二次则直接从快取中取得数据:

Hibernate: select user0_.id as col_0_0_ from user user0_


由于使用iterator()方法时会使用到Session level快取,所以在查询大量数据时,会耗用大量的内存,必要时可以使用Session的evict()或clear()方法来清除快取。

转载于:https://www.cnblogs.com/Syria/p/6363871.html

相关文章:

  • MobX
  • ADO.NET 2.0 - 如何查看 DataView 的内容
  • 蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
  • NQL.NET 数据库对象查询语言简介 2
  • [转]nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法
  • js学习笔记
  • eclipse tomcat lomboz的安装配置说明
  • 微服务运行指南——For Cattle
  • DEMO[C#]TypeChange 关于类型转换的一个DEMO
  • 查看mysql的安装路径
  • 看门老头告诉你什么是网关
  • JS学习笔记——闭包
  • SuperPasterV1.0 测试版发布
  • c语言(01)
  • 第7章 处理串行线路和帧中继连接故障
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017届校招提前批面试回顾
  • Babel配置的不完全指南
  • CentOS 7 防火墙操作
  • Nodejs和JavaWeb协助开发
  • Redis 懒删除(lazy free)简史
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis的resp协议
  • Vue实战(四)登录/注册页的实现
  • 基于web的全景—— Pannellum小试
  • 深度学习入门:10门免费线上课程推荐
  • 算法---两个栈实现一个队列
  • 云大使推广中的常见热门问题
  • 仓管云——企业云erp功能有哪些?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #mysql 8.0 踩坑日记
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $NOIp2018$劝退记
  • (Java)【深基9.例1】选举学生会
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)fiber的基本认识
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (数据结构)顺序表的定义
  • (四)汇编语言——简单程序
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net 程序发生了一个不可捕获的异常
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 指南:抽象化实现的基类
  • .stream().map与.stream().flatMap的使用
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化