如果我们要保存的数据量十分巨大,海量信息的保存、更新,那么在程序中执行添加、更新方法,如session.save(),Session对象自身开辟的一级缓存会不断消耗,直至内存溢出。因为每save()一个对象都会添加到一级缓存中,数据量太大,绝对会造成内存溢出。那么该怎样解决大批量操作数据呢?
有一种方法就是在每保存指定条数的数据时,先将一级缓存中的数据与数据库同步一下,之后再清空一级缓存,继续保存接下来的数据,依次循环,直至保存完毕。如下代码:
public void savePetInfo()
{
// 创建Session对象
Session session = HibernateSessionFactory.getSession();
// 创建PetInfo对象
PetInfo petInfo = new PetInfo();
petInfo.setPetName("灰太狼");
petInfo.setPetLove(100);
// 批量保存数据
for (int i=0;i<100000;i++)
{
// 保存
session.save(petInfo);
// 当保存50条之后,将缓存中的数据与数据库同步,之后清空一级缓存
if (i%50==0)
{
// 将一级缓存中的数据同步到数据库中
session.flush();
// 清空一级缓存中的数据,这样不至于造成内存溢出
session.clear();
}
}
// 创建Transaction对象
Transaction transaction = session.beginTransaction();
// 提交事务
transaction.commit();
// 关闭session
session.close();
}
实际上Hibernate中为我们处理海量信息的操作提供了解决办法,通过StatelessSession接口实现,该接口是一个无状态接口,它不和一级缓存、二级缓存交互,也不出发任何事件、监听器、拦截器,通过该接口的操作会立即发送给数据库,与JDBC功能一样, StatelessSession session = sessionFactory.openStatelessSession();
还有一种方法进行批量操作就是利用Query对象的executeUpdate()方法执行批量更新、删除、增加,它会清除相关联类的二级缓存(利用:sessionFactory.Evict(Class clz)),但是这样会造成级联和乐观锁定出现问题。
分享到:
相关推荐
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据
使用Hibernate将大量记录插入到数据库
在Java SE中使用Hibernate处理数据
了解Hibernate的一个很好的文档,想学Hibernate的朋友可以载来看看。
hibernate缓存机制 hibernate缓存机制 hibernate缓存机制
Hibernate中数据类型,涵盖了所有数据库的字段类型与Java基本类型间的映射关系
spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码。代码拿过去即可集成使用。
Hibernate中可以通过增加一个版本号字段来实现乐观锁机制。当多个线程同时访问数据库时,版本号字段可以防止数据的并发修改。 在大数据量系统中,表拆分是非常重要的。例如,在股票交易系统中,每几秒钟就有一个...
使用JDBC和Hibernate来写入Blob型数据到Oracle中;使用JDBC和Hibernate来写入Blob型数据到Oracle中
Hibernate 锁机制是指在数据库访问中,为了维护数据的一致性和正确性,所采取的一些机制来防止数据的并发访问和修改。 Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁(Pessimistic Locking) 悲观锁是一...
Hibernate 使用缓存时,数据同步问题
hibernate入门数据简单插入
在Hibernate中实现复杂的数据映射
hibernate事务管理机制.dochibernate事务管理机制.doc
Java Hibernate3 添加和删除数据实例,供大家一起共同分享学习。
Hibernate是一个面向Java... Hibernate不仅仅管理Java类到数据库表映射(包括Java数据类型到SQL数据数据的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间......
◎ 数据持久化的概念 ◎ ORM的基本概念,POJO,PO的概念以及JDO的实现机制 ◎ Hibernate的实现机制 ◎ Hibernate的开发过程:如何配置数据库连接,如何操作数据库
首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子。 Hibernate缓存的作用: Hibernate是一个持久层框架
收集而来。非常的好@@@累死了,睡觉去@ 在struts+hibernate中使用tomcat5.5的jndi数据源
在Hibernate中处理批量更新和批量删除