在做大批量处理时,容易出现outofmemory的情况,分析及解决如下
(1)原因
当首次作Insertupdatedeleteselect时,新产生的object在session关闭之前将自动装载到session级别的缓存区,如果,AP使用了二级缓存,同样也会装入到二级缓存。所以当数据量大时,就会出现outofmemory情况。
(2)解决方法
(A)批量插入(Batch inserts)/批量更新(Batch updates)
必须通过经常的调用
flush() 以及稍后调用
clear() 来控制第一级缓存的大小
如:
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 //20,与JDBC批量设置相同
//flush a batch of inserts and release memory:
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
}
tx.commit();
session.close();
(B)大批量更新/删除(Bulk update/delete)
使用HQL语言
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
执行一个HQL
DELETE,同样使用
Query.executeUpdate() 方法 (此方法是为 那些熟悉JDBC
PreparedStatement.executeUpdate() 的人们而设定的)
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
分享到:
相关推荐
然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。以下是一些关于如何在Hibernate环境下优化批量数据处理的策略。 首先,了解问题的根源。在上述例子中,当尝试向...
本文将深入探讨在Hibernate中处理批量更新和批量删除的策略,以及如何优化这些操作,以提高数据库操作的效率。 ### 批量更新的常规方法 在Hibernate中,最直观的批量更新方式是通过循环遍历查询结果集,并对每个...
### Hibernate批量处理详解 #### 一、批量处理概述 Hibernate作为一种强大的对象关系映射(ORM)框架,提供了多种批量处理的方式以提高数据处理效率。批量处理对于需要在短时间内处理大量数据的应用尤其重要,如...
### Hibernate批量处理数据 #### 一、概述 Hibernate作为一款流行的Java持久层框架,它能够以面向对象的方式处理数据库操作,极大地简化了开发过程。然而,在处理大量数据时,如果仍然采用逐条处理的方式,将会...
### Hibernate批量删除详解 #### 背景与概念 在Java开发中,处理大量数据时,经常需要执行批量操作,如批量更新或批量删除。这些操作对于提高应用程序性能至关重要,尤其是在涉及成千上万条记录的情况下。...
#### 策略一:利用Hibernate的批量处理机制 1. **使用`flush()`和`evict()`方法**:在修改实体后,主动调用`session.flush()`方法,使Hibernate将缓存中的变更同步到数据库,然后调用`session.evict(entity)`方法,...
在当今的IT开发领域中,特别是在使用Java语言开发的Web应用程序中,JSP和Hibernate是构建动态网站和Web服务时经常使用的两种技术。...开发者应当根据具体的应用场景和数据库特性,选择合适的批量处理策略。
Hibernate 提供了两种批量更新机制:一级缓存(First-Level Cache)和批量抓取(Batching)。 一级缓存 Hibernate 的一级缓存是指 Session 对象中缓存的所有对象。在批量更新时,如果不及时清除一级缓存,可能会...
以下是针对Hibernate批量处理海量数据的一些关键知识点和优化策略: 1. **理解Hibernate的工作原理**:Hibernate通过查询数据库获取数据,并将其转化为Java对象存储在内存中,这种做法在处理小量数据时非常便捷,但...
总的来说,这个批量删除源码示例展示了如何利用Struts2处理HTTP请求,Spring管理依赖,以及Hibernate与数据库交互,是学习和理解三大框架整合开发的一个实践案例。通过分析和理解这段代码,开发者可以提升自己在企业...
本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...
本文件主要探讨了如何使用Hibernate进行批量更新和批量删除处理,这些操作在处理大量数据时尤其重要,因为它们可以显著提高应用的性能。下面我们将深入解析这两个主题。 批量更新在Hibernate中通常涉及在一个事务中...
Hibernate 下数据批量处理 Java 教程 本文主要介绍了使用 Hibernate 实现数据批量处理的方法和注意事项。在 Java 中,对数据批量处理的需求非常重要,但许多人对 Java 是否适合批量处理持有怀疑念头。实际上,如果...
标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...
【hibernate批量操作实例详解】 批量操作是提高数据库处理效率的重要手段,特别是在处理大量数据时,能够显著提升性能并减少资源消耗。在Hibernate中,批量操作主要包括批量插入、批量更新和批量删除。以下是对这些...
在进行数据库操作时,经常会遇到需要批量处理数据的情况,例如批量更新或批量删除等。利用Hibernate框架可以方便地实现这些功能,提高开发效率并减少资源消耗。本文将详细介绍如何通过Hibernate进行批量删除,并探讨...
针对这种情况,Hibernate提供了一些批量处理的解决方案。 批量插入是处理大量数据插入的一种有效方法。通常,初学者可能会尝试一次性创建大量对象并调用Session的save()方法来保存,但这会导致所有对象被存储在...
在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...
1. 批量操作:在处理大量数据时,避免单条插入或更新,应采用批量处理,将多条数据一次性提交,以减少网络通信和数据库事务开销。 2. 数据分片:将大数据分散到多个数据库或表中,通过分布式处理提高读写速度。 3. ...