如果我们要保存的数据量十分巨大,海量信息的保存、更新,那么在程序中执行添加、更新方法,如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)),但是这样会造成级联和乐观锁定出现问题。
分享到:
相关推荐
3. 更强大的批处理:通过改进的批处理策略,减少了数据库交互次数,提升了大批量数据处理能力。 4. 新的事件监听器:提供了更多扩展点,方便自定义业务逻辑。 五、实际应用 在实际开发中,Hibernate常用于企业级...
此外,对于大批量数据操作,也进行了性能调优。 6. **元数据API**: 元数据API得到了增强,使得获取实体和关联信息更加方便,这对于动态生成代码或者进行元编程非常有用。 7. **实体生命周期回调**: Hibernate ...
当涉及到批量数据处理时,如大批量的更新和删除操作,性能和效率成为开发者需要重点考虑的问题。本文将详细介绍如何在使用JSP和Hibernate环境下进行高效的批量更新与删除操作。 ### 批量更新与批量删除 批量操作指...
4. 性能优化:Hibernate框架在操作数据库时可能会产生性能瓶颈,特别是在大批量数据操作时。性能优化可以包括合理配置二级缓存、优化HQL查询语句、使用批量操作减少数据库交互次数、控制懒加载的使用等。在配置时,...
例如,合理使用缓存策略,避免N+1查询问题,以及在处理大批量数据时启用批处理等。 6. **实战应用**: 学习Hibernate不仅仅是理论,更需要通过实际项目来提升技能。可以尝试搭建一个简单的CRUD应用,逐步理解和...
- **批量插入**:介绍如何优化大批量数据的插入操作。 - **批量更新**:讨论如何优化大批量数据的更新操作。 - **无状态 Session 接口**:解释如何使用 StatelessSession 接口进行高效的数据操作。 - **DML 风格操作...
探讨了如何利用Hibernate进行高效的批量数据处理,包括批量插入、批量更新和大批量更新/删除操作,以及如何通过合理配置提升应用的整体性能。这部分对于处理大数据量的应用场景尤为重要。 七、Hibernate与J2EE应用...
批量处理技术,如批量插入、批量更新和大批量更新/删除,可以显著提高大量数据的处理效率。Hibernate的HQL(Hibernate Query Language)是一种面向对象的查询语言,用于执行复杂的数据检索和聚合操作。HQL语法类似于...
- 直接通过JDBC API或存储过程进行操作,这是处理大批量更新的最佳方式。 7. OpenSessionView问题: - 主要用于解决懒加载异常,将Hibernate Session与请求线程绑定,保证页面读取数据时Session开启状态。 - ...
13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. ...
适用于需要频繁进行大批量数据读取的应用场景,例如报表系统、数据分析平台等。 #### 二、Batch Size的合理配置 **知识点解析:** Batch Size是指在执行批量操作时,Hibernate一次提交的SQL语句数量。合理的Batch ...
14.3. 大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 ...
14.3. 大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 ...
13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. ...
5. 深入理解 Hibernate 的自动批处理机制,优化大批量数据操作。 通过深入学习和熟练运用 Hibernate 4.1.8.Final,开发者可以在 Java 应用中实现高效、稳定的数据库操作,提高项目开发效率,降低维护成本。无论是在...
大批量更新/删除(Bulk update/delete) 15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7...
- **批量数据处理:** 针对大批量数据处理任务,建议直接使用JDBC,以获得更好的性能。 **2. 缓存配置** - **Hibernate二级缓存:** Hibernate提供了两级缓存机制。第一级缓存由Session管理,主要用于事务范围内的...
6. **批处理支持**:Spring Batch提供了用于执行大批量处理任务的框架,包括读取、处理和写入数据,以及错误处理和重试机制。 7. **消息支持**:Spring Integration为异步处理和企业服务总线(Enterprise Service ...
1. **分批提交**:将大批量的数据分割成小批次,每完成一批次的插入操作后立即提交事务。这样可以有效地避免内存溢出的问题。 2. **使用Session的缓存机制**:利用Hibernate的二级缓存功能来缓存待插入的数据,减少...