今天在做一个项目中遇到一个问题,描述如下:
需要对一批满足条件的数据进行批量操作,如果符合条件,则批量更新,不符合条件则不提交,但是每次在不满足条件的情况下都会进行数据更新,查询相关资料发现。hibernate在关闭session时候会对内存中的持久化对象进行检查操作,也就是说 如果内存中的持久化对象跟数据量中的对象内容不一致时,hibernate不管你是否update都会进行更新操作。
解决方法如下有两个
方法一:对这批数据的PO类进行深度克隆;
首先po对象需要继承java.lang.cloneable接口,实现clone方法,代码如下
public Object clone(){
try{
return super.clone();
}
catch(CloneNotSupportedException ex){
return null;
}
}
在程序代码中
object =object.clone();
这样就完成了深度克隆,防止hibernate提交数据
方法二、每次查询出一条数据之后调用getSession().evict(obj);进行状态更改,由持久态-->游离态,这样在关闭时候 如果显式调用hibernate的话进行状态更新,否则不会进行进行数据库更新
总结:这个例子虽然很简单,但是对于理解hibernate的工作原理是很个很典型的例子,记录下方便以后查阅。
分享到:
相关推荐
本文将讨论使用 Hibernate 批量更新大量数据的方法和技巧。 批量更新的必要性 在实际应用中,我们经常需要将大量数据插入到数据库中,例如数据迁移、数据同步、数据备份等场景。在这些场景中,如果使用传统的 ...
在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...
这种方法的问题在于,每次更新都需要执行一个单独的SQL语句,这不仅消耗了过多的网络资源,而且极大地降低了数据库的性能,尤其是在更新大量数据时。 ### 优化批量更新 为了优化批量更新操作,可以采取以下策略: ...
在Hibernate应用中处理批量更新和批量删除时,开发者应充分考虑数据库性能和资源消耗,合理利用Hibernate提供的高级功能和JDBC API,以及数据库自身的特性,以实现高效、稳定的批量数据处理。通过上述策略的应用,...
因此,本文将详细介绍Hibernate如何高效地进行批量数据处理,包括批量插入、批量更新和批量删除。 #### 二、批量插入 在批量插入数据时,直接使用循环逐一保存的方式容易导致内存溢出。这是因为Hibernate的Session...
当涉及到批量数据处理时,如大批量的更新和删除操作,性能和效率成为开发者需要重点考虑的问题。本文将详细介绍如何在使用JSP和Hibernate环境下进行高效的批量更新与删除操作。 ### 批量更新与批量删除 批量操作指...
### Hibernate批量删除详解 #### 背景与概念 在Java开发中,处理大量数据时,经常需要执行批量操作,如批量更新或批量删除。这些操作对于提高应用程序性能至关重要,尤其是在涉及成千上万条记录的情况下。...
本文件主要探讨了如何使用Hibernate进行批量更新和批量删除处理,这些操作在处理大量数据时尤其重要,因为它们可以显著提高应用的性能。下面我们将深入解析这两个主题。 批量更新在Hibernate中通常涉及在一个事务中...
以下是针对Hibernate批量处理海量数据的一些关键知识点和优化策略: 1. **理解Hibernate的工作原理**:Hibernate通过查询数据库获取数据,并将其转化为Java对象存储在内存中,这种做法在处理小量数据时非常便捷,但...
### Hibernate批量处理详解 #### 一、批量处理概述 Hibernate作为一种强大的对象关系映射(ORM)框架,提供了多种批量处理的方式以提高数据处理效率。批量处理对于需要在短时间内处理大量数据的应用尤其重要,如...
在批量删除这种可能影响大量数据的操作中,事务管理尤为重要,确保数据的一致性和完整性。 在实际操作中,用户可能通过前端界面选择多个待删除的记录,这些记录的ID会被打包成一个列表传递给后台。Struts2的Action...
本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...
在批量更新数据时,我们可以使用 Hibernate 的 ScrollableResults 对象。例如: ``` Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); ScrollableResults customers ...
然而,在处理大量数据的批量操作时,如批量插入、更新或删除,如果不采取适当的策略,可能会导致性能问题甚至出现内存溢出异常。针对这种情况,Hibernate提供了一些批量处理的解决方案。 批量插入是处理大量数据...
在进行数据库操作时,经常会遇到需要批量处理数据的情况,例如批量更新或批量删除等。利用Hibernate框架可以方便地实现这些功能,提高开发效率并减少资源消耗。本文将详细介绍如何通过Hibernate进行批量删除,并探讨...
Hibernate配置各种数据源 <hibernate-configuration> <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ”show_sql”>true <!– SQL方言,这边设定的是MySQL –> ”dialect”>...
标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...
本文将深入探讨如何在Hibernate中进行批量更新和删除,并分析其优缺点以及可能的优化策略。 批量更新是数据库操作中常见的一种场景,特别是在需要对大量数据进行统一修改时。在Hibernate中,批量更新通常涉及以下...
Hibernate批量插入的常见问题在于,如果一次性保存大量对象,会占用大量内存,可能导致`OutOfMemoryException`,因为默认情况下,Session一级缓存会存储所有待持久化的对象。为了避免这种情况,我们需要定期将缓存...