- 浏览: 115220 次
- 性别:
- 来自: 上海
文章分类
最新评论
session flush测试:
session flush方法主要做了两件事:
1 清理缓存
2 执行sql(不是提交事务)
session在什么情况下执行flush
1 默认在事务提交时
2 显式的调用flush
3 在执行查询前,如:iterate
hibernate按照save(insert),update,delete顺序提交相关的操作
------------------------------------------------------------------------
<id name="id">
<generator class="uuid"/>
</id>
因为id的主键生成策略采用的是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后数据无法回滚
session.getTransaction().commit();
<id name="id">
<generator class="native"/>
</id>
如果id的主键生成策略采用的是native,调用save(user)时会发出insert语句,返回由数据库生成的id,
user对象纳入到session的管理,session中existsInDatebase状态为true
-----------------------------------------------------------------
<id name="id">
<generator class="uuid"/>
</id>
session.save(user);
将user对象从session中逐出,即session的EntiryEntries属性中逐出
session.evict(user);//清理缓存
无法成功提交,因为hibernate在清理缓存时,在session的insertions集合中取出user对象进行insert操作后
需要更新entityEntries属性中的existsnDatabase为true,而我们采用evict已经将user从session中
逐出了,所以找不到相关数据,无法更新,抛出异常
session.getTransaction().commit();
----------------------------------------------------------------
<id name="id">
<generator class="uuid"/>
</id>
session.save(user);
flush后hibernate会清理缓存,会将user对象保存到数据库中,将session中的insertions中的user
清除,并且设置session中existsInDatabase的状态为true
session.flush(user);
将user对象从session中逐出,即session的EntityEntries属性中逐出
session.evict(user);//清理缓存
可以成功提交,因为hibernate在清理缓存时,在session的insertions集合中无法找到user对象
所以就不会发出insert语句,也不会更新session中的existsInDatabase的状态
session.getTransaction().commit();
-----------------------------------------------------------------
<id name="id">
<generator class="native"/>
</id>
session.save(user);
将user对象从session中逐出,即session的EntityEntries属性中逐出
session.evict(user);//清理缓存
可以成功提交,因为hibernate在清理缓存时,在session的insertions集合中无法找到user对象
所以就不会发出insert语句,也不会更新session中的existsInDatabase的状态
session.getTransaction().commit();
-----------------------------------------------------------------
<id name="id">
<generator class="assigned"/>
</id>
session.save(user);
user.setName("张三");
session.update(user);
User user2=new User();
user2.setId("003");
user2.setName("李四");
session.getTransaction().commit();
结果:
insert into ...
insert into ...
update t_user ...
hibernate按照save(insert),update,delete顺序提交相关的操作
-----------------------------------------------------------------
<id name="id">
<generator class="assigned"/>
</id>
session.save(user);
user.setName("张三");
session.update(user);
因为我们在session.update(user)后执行了flush,所以在以commit清理缓存时执行flush前的sql就不会发出.
session.flush();//在这里flush操作就可以了
User user2=new User();
user2.setId("003");
user2.setName("李四");
session.getTransaction().commit();
结果:
insert into ...
update t_user ...
insert into ...
按照我们想要顺序save(insert),update,save(insert)的顺序提交操作
-----------------------------------------------------------------
发表评论
-
hibernate基础-初步
2009-11-03 15:26 626类拟框架:Apache OJB,JDO,Toplink,EJB ... -
hibernate基础-基本映谢标签和属性
2009-11-03 15:35 664hibernate基本映射 实体类------>表 实体 ... -
hibernate基础-映射关系(多对一I一对一)
2009-11-03 15:53 497多对一关联映射 many-to-one关联映射本质: * ... -
hibernate基础-映射关系(一对多I多对多).
2009-11-03 16:04 600一对多关联映射(one-to-many) 一对多关联映射利用了 ... -
hiberante基础-继承映射
2009-11-03 16:15 754继承映射的三种策略: * 单表继承,每棵类继承树使用一个表 ... -
hibernate基础-其他映射
2009-11-03 16:17 667set、list、array、map Collection: ... -
hibernate基础-自关联映射
2009-11-03 16:19 7531 class Node: private int id;pr ... -
hibernate基础-Component+[联合]映象
2009-11-03 16:22 508Component映射(值对象映射) 在hibernate中, ... -
hibernate基础-lazy策略
2009-11-03 16:33 790lazy策略可以使用在: * <class> ... -
hibernate基础-fetch抓取
2009-11-03 16:34 590抓取策略(单端代理的批量抓取) 1 保持默认,也就是fetch ... -
hibernate基础-悲观[乐观]锁
2009-11-03 16:40 494悲观锁 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据 ... -
hiberante基出-缓存
2009-11-03 16:49 501一级缓存 * 一级缓存是缓存实体对象的 * 如果管理一 ... -
hibernate基础-HQL
2009-11-03 17:14 538在hql中关键字不区分大小写,但是属性和类名区分大不写简单属性 ... -
hibernate基础-HibernateTemplate
2009-11-03 17:20 5751 ,void delete ( Object entity ... -
[导入]Hibernate 深入研究之 Criteria
2009-11-03 17:35 566文章来源:http://www.cnblogs.com/ ... -
DetachedCriteria
2009-11-03 17:41 658org.hibernate.criterion.Detache ... -
Restrictions
2009-11-03 17:46 727HQL运算符 ... -
hibernate.cfg.xml
2009-11-03 17:56 613<?xml version="1.0&quo ... -
由映射文件生成表
2009-11-03 17:57 555import org.hibernate.cfg.Confi ... -
JNDI连接池
2009-11-29 21:19 724管理连接对象 Modle:biz,dao,entity 数据源 ...
相关推荐
Hibernate的Session_flush与隔离级别代码详解 Hibernate 是一个基于Java的 ORM(Object-Relational Mapping)工具,提供了将 Java 对象映射到关系数据库的能力。其中 Session_flush 和隔离级别是两个重要的概念。 ...
在Java的持久化框架Hibernate中,`Session`和`Transaction`是两个至关重要的概念,它们在数据管理和事务处理中起到核心作用。这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与...
`Session.flush()`方法是一个关键的操作,它强制Hibernate将内存中的对象状态同步到数据库,确保数据的一致性。这篇博客深入探讨了`Session.flush()`的工作原理和应用场景。 `Session`在Hibernate中主要有以下职责...
在实践中,要注意性能优化,比如合理选择关联容器类型,以及适时地调用`session.flush()`和`session.clear()`来管理缓存和事务。通过深入学习和实践,你将能够自如地应对各种多对多关系的映射需求。
当达到特定条件或手动调用`Session.flush()`时,Hibernate会将这些变更持久化到数据库。 Flush过程主要包括以下步骤: 1. **对象状态检查**:Hibernate会检查Session中的所有对象,判断它们是否需要被更新、插入...
### Hibernate的核心接口——Session详解 #### 一、Session简述 **1. Session概念** - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,...
当我们在Session上进行操作时,这些操作不会立即反映到数据库中,而是被缓存起来,直到调用`flush()`方法或者事务提交时才会真正执行。 在开始使用Session之前,需要配置Hibernate的环境,包括创建SessionFactory,...
在业务逻辑处理中,通常使用Session的beginTransaction、save/merge、flush和commit等方法来完成数据库操作。 3. **Query和Criteria API**:提供两种方式执行查询,一是HQL(Hibernate Query Language),类似于SQL...
- 使用`Session.flush()`显式触发脏检查,如果发现异常,事务也会回滚。 通过以上内容,我们了解了Hibernate 5在数据持久化和事务管理方面的基本操作和注意事项。在实际项目中,结合事务的隔离级别、锁机制以及适当...
session.flush(); session.clear(); } } tx.commit(); } catch (Exception e) { if (tx != null) tx.rollback(); e.printStackTrace(); } finally { session.close(); } ``` #### 五、常见问题解答 **...
一级缓存的清理通常由Session的flush()或close()方法触发,而二级缓存可以通过设置定时任务或事件监听器等方式定期清理。对于数据的更新,Hibernate提供了穿透式缓存、查询缓存等多种方式来处理。 总结起来,...
4. **关闭Session**:当Session被关闭时,Hibernate会自动执行Flush操作,以确保所有未提交的更改都被持久化到数据库中。 #### 错误示例分析 在给定的部分内容中,提到了一个典型的错误场景,其中包含了一个常见的...
1. CRUD操作:通过Session接口实现增删改查,如`session.save()`、`session.get()`、`session.update()`和`session.delete()`。 2. HQL查询:使用Query接口进行基于Hibernate Query Language的查询,支持复杂条件和...
`Open Session In View`的主要作用是在Web请求的开始阶段打开`Hibernate session`,并在请求结束时自动关闭该session。这样做的好处在于,可以确保在整个请求处理过程中session始终处于可用状态,使得在视图(View)层...
3. 清理与刷新:Session的clear()方法会清空一级缓存,而flush()方法则会强制将所有未提交的更改同步到数据库。 四、压缩包内容分析 "hibernate_cache_level_1.rar"文件很可能包含了一个示例项目,用于演示如何在...
2. 更新:调用Session的update()方法,或者直接修改对象属性后调用flush()方法。 3. 删除:使用Session的delete()方法,将对象从数据库中移除。 4. 查询:Criteria API和Query API提供了丰富的查询手段,可以根据...
在使用Hibernate进行数据库操作时,事务管理和`flush`方法的正确使用至关重要,因为它们直接影响到数据的一致性和安全性。在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些...
在Hibernate中,session_flush功能是涉及到Session对象的flush操作。当在应用层更新或保存实体时,这些操作会被缓存起来,并不会立即反映到数据库中。直到调用Session.flush()方法,Hibernate才会把缓存中待处理的...
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
关于 Hibernate 中 Session 的关闭实例解析 Hibernate 是一个流行的 Java 持久层框架,它提供了许多强大功能来管理数据库交互。Session 是 Hibernate 中的一种基本概念,它扮演着关键角色来管理数据库交互。本文将...