栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

关于Hibernate session.flush()的问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于Hibernate session.flush()的问题

来自的javadoc

Session#flush

强制刷新该会话。必须在提交事务并关闭会话之前在工作单元的末尾调用(取决于 flush-
mode
,Transaction.commit()
调用此方法)。

刷新 是将基础持久性存储与内存中保持的可持久状态进行同步的过程。

换句话说,

flush
告诉Hibernate执行将JDBC连接状态与会话级缓存中保存的对象状态同步所需的SQL语句。条件
if (i % 20 ==0)
将使它每
i
20的倍数发生一次。

但是,新

Car
实例仍将保留在会话级缓存中,并且,大的话
myList.size()
,您将吃光所有内存并最终获得
OutOfMemoryException
。为了避免这种情况,文档中描述的模式是按固定的时间间隔(与JDBC批处理大小相同)对会话进行
flush

AND操作
clear
,以保留更改,然后分离实例,以便可以对其进行垃圾回收:

13.1。批量插入

在使新对象持久化flush()然后定期清除()时,会话将控制一级缓存的大小。

Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();for ( int i=0; i<100000; i++ ) {    Customer customer = new Customer(.....);    session.save(customer);    if ( i % 20 == 0 ) { //20, same as the JDBC batch size        //flush a batch of inserts and release memory:        session.flush();        session.clear();    }}tx.commit();session.close();

该文档在同一章中提到了如何设置JDBC批处理大小。

也可以看看

  • 10.10。冲洗会议
  • 第13章批处理


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号