来自的javadoc
Session#flush:
强制刷新该会话。必须在提交事务并关闭会话之前在工作单元的末尾调用(取决于 flush-
mode,Transaction.commit()
调用此方法)。刷新 是将基础持久性存储与内存中保持的可持久状态进行同步的过程。
换句话说,
flush告诉Hibernate执行将JDBC连接状态与会话级缓存中保存的对象状态同步所需的SQL语句。条件
if (i % 20 ==0)将使它每
i20的倍数发生一次。
但是,新
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章批处理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)