Hibernate commit() 和flush() 的区别
<<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来
所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库
Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.
commit针对事物的
flush针对缓存的
同步到数据库中后只要没有commit还是可以rollback的
public void testSave1() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction(); User1 user = new User1();
user.setName("李四");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//因为user的主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理
//不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false
session.save(user);
//调用flush,hibernate会清理缓存,执行sql
//如果数据库的隔离级别设置为未提交读,那么我们可以看到flush过的数据
//并且session中existsInDatebase状态为true
session.flush();
//提交事务
//默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush
//commit后数据是无法回滚的
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testSave2() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction(); User2 user = new User2();
user.setName("张三1");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id
//纳入了session的管理,修改了session中existsInDatebase状态为true
//如果数据库的隔离级别设置为未提交读,那么我们可以看到save过的数据
session.save(user);
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
分享到:
相关推荐
然而,对于Hibernate的一些高级特性,如Flush机制,深入理解其工作原理对于避免潜在的陷阱和提高应用程序性能至关重要。 #### Flush机制概览 在Hibernate中,Flush机制是用于同步Session缓存与数据库之间变化的...
在使用Hibernate进行数据库操作时,事务管理和`flush`方法的正确使用至关重要,因为它们直接影响到数据的一致性和安全性。在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些...
在深入理解Hibernate中的flush机制时,我们首先要明白的是,Hibernate是一个ORM(对象关系映射)框架,它在Java应用程序和数据库之间提供了一种抽象层。flush机制是Hibernate中非常重要的一部分,它涉及到对象的状态...
3. **Flush模式**: Hibernate有四种Flush模式:AUTO、COMMIT、MANUAL和NEVER。在大数据批处理中,一般使用MANUAL或COMMIT模式,以控制何时将脏数据刷新到数据库,避免频繁的自动刷新影响性能。 4. **Query....
然而,在将大量数据插入到数据库时,Hibernate 经常会出现性能和内存溢出问题。本文将讨论使用 Hibernate 批量更新大量数据的方法和技巧。 批量更新的必要性 在实际应用中,我们经常需要将大量数据插入到数据库中...
在代码中,我们需要在适当的时候调用`flush()`和`clear()`方法,强制将缓存中的对象写入数据库并清空缓存,从而释放内存。例如: ```java Session session = sessionFactory.openSession(); Transaction tx = ...
在业务逻辑处理中,通常使用Session的beginTransaction、save/merge、flush和commit等方法来完成数据库操作。 3. **Query和Criteria API**:提供两种方式执行查询,一是HQL(Hibernate Query Language),类似于SQL...
`flush()`、`clear()`和`close()`方法分别用于清理缓存并执行SQL(但不提交)、清空缓存和回滚事务,以及清空缓存并提交事务。值得注意的是,`Session`中的缓存会存储所有被操作的对象,如`save`、`update`、`get`和...
本文将深入探讨在Hibernate中处理批量更新和批量删除的策略,以及如何优化这些操作,以提高数据库操作的效率。 ### 批量更新的常规方法 在Hibernate中,最直观的批量更新方式是通过循环遍历查询结果集,并对每个...
通过以上介绍,我们可以看到 Hibernate 提供了多种查询方式以及批处理和连接池的配置选项,这些功能可以帮助开发者更高效地管理和操作数据库。在实际应用中,开发者可以根据具体的需求选择合适的查询方式,并合理...
通过`openSession()`方法创建Session实例,`save()`, `update()`, `delete()`等方法用于持久化操作,`flush()`和`clear()`方法则用来管理缓存和事务。 3. **Criteria 查询**:除了传统的HQL(Hibernate Query ...
本文将深入探讨Hibernate中的事务处理机制,并通过具体示例帮助读者更好地理解和运用。 #### 二、Hibernate事务处理基础 ##### 2.1 事务概念 在数据库操作中,事务是指一系列操作作为一个完整的单元来执行。这些...
同时,合理设置缓存策略和使用批处理操作(如`Session.flush()`和`Session.clear()`)也能显著提高应用性能。 此外,`SessionFactory`是Hibernate的重要组件,它负责创建和管理`Session`对象。一个应用程序通常只...
在Hibernate中,我们可以使用Transaction接口来管理事务,通过`begin()`开启事务,`commit()`提交事务,`rollback()`回滚事务,确保数据的一致性。同时,Hibernate也支持Spring等框架的事务管理方式,提供更高级别的...
Hibernate的核心配置文件是`hibernate.cfg.xml`,它包含了数据库连接信息、实体类映射和SessionFactory的创建设置。配置文件中的关键元素有: 1. `session-factory`: 定义SessionFactory的属性,如数据库URL、...
1. **使用`flush()`和`evict()`方法**:在修改实体后,主动调用`session.flush()`方法,使Hibernate将缓存中的变更同步到数据库,然后调用`session.evict(entity)`方法,从缓存中移除实体,这样下一次操作不会受到...
1. SessionImpl:Session的实现类,包含打开、关闭、flush和commit等关键方法。 2. Criteria API:源码中可以看到CriteriaBuilder和CriteriaQuery的实现,用于构建动态查询。 3. QueryTranslator:翻译HQL语句到SQL...
- 首先,你需要在项目中添加Hibernate和MySQL的JDBC驱动依赖。这通常通过Maven或Gradle的pom.xml或build.gradle文件完成。 - 添加Hibernate核心库: ```xml <groupId>org.hibernate <artifactId>hibernate-...
而在事务提交(`Transaction.commit()`)时,Hibernate会自动执行flush操作。 3. **缓存查询**:当从数据库中查询数据时,Hibernate首先会在一级缓存中查找,如果找到则直接返回,无需再次访问数据库,这大大提升了...
在Java的持久化框架Hibernate中,缓存机制和Session对象的管理是其高效运作的关键要素。本文将深入探讨这两个主题,以帮助开发者更好地理解和利用Hibernate。 首先,让我们聚焦于Hibernate的缓存机制。缓存的存在是...