- 浏览: 156120 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jiangyeqt:
好好的温习了一遍,讲的非常的到位
Session的原理 -
JAVA静静:
这是什么啊?有没有源码?看不懂诶!
开源框架Pushlet入门 -
colinzhy:
讲的很深刻,学习了
Session的原理 -
昔雪似花:
...
Map-iterator -
不相信眼泪:
恩,很好,多谢
.scc文件是做什么用的?
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)的顺序提交操作
-----------------------------------------------------------------
发表评论
-
Java通用数据访问层Fastser-DAL推荐
2014-12-29 10:20 5573本着不重复造轮子的原则,基于mybatis、spring ... -
hibernate基础-初步
2009-11-03 15:26 670类拟框架:Apache OJB,JDO,Toplink,EJB ... -
hibernate基础-基本映谢标签和属性
2009-11-03 15:35 744hibernate基本映射 实体类------>表 实体 ... -
hibernate基础-映射关系(多对一I一对一)
2009-11-03 15:53 677多对一关联映射 many-to-one关联映射本质: * ... -
hibernate基础-映射关系(一对多I多对多).
2009-11-03 16:04 594一对多关联映射(one-to-many) 一对多关联映射利用了 ... -
hiberante基础-继承映射
2009-11-03 16:15 590继承映射的三种策略: * 单表继承,每棵类继承树使用一个表 ... -
hibernate基础-其他映射
2009-11-03 16:17 621set、list、array、map Collection: ... -
hibernate基础-自关联映射
2009-11-03 16:19 6111 class Node: private int id;pr ... -
hibernate基础-Component+[联合]映象
2009-11-03 16:22 570Component映射(值对象映射) 在hibernate中, ... -
hibernate基础-lazy策略
2009-11-03 16:33 554lazy策略可以使用在: * <class> ... -
hibernate基础-fetch抓取
2009-11-03 16:34 665抓取策略(单端代理的批量抓取) 1 保持默认,也就是fetch ... -
hibernate基础-悲观[乐观]锁
2009-11-03 16:40 652悲观锁 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据 ... -
hiberante基出-缓存
2009-11-03 16:49 710一级缓存 * 一级缓存是缓存实体对象的 * 如果管理一 ... -
hibernate基础-HQL
2009-11-03 17:14 746在hql中关键字不区分大小写,但是属性和类名区分大不写简单属性 ... -
hibernate基础-HibernateTemplate
2009-11-03 17:20 7111 ,void delete ( Object entity ... -
[导入]Hibernate 深入研究之 Criteria
2009-11-03 17:35 651文章来源:http://www.cnblogs.com/ ... -
DetachedCriteria
2009-11-03 17:41 907org.hibernate.criterion.Detache ... -
Restrictions
2009-11-03 17:46 804HQL运算符 ... -
hibernate.cfg.xml
2009-11-03 17:56 623<?xml version="1.0&quo ... -
由映射文件生成表
2009-11-03 17:57 680import org.hibernate.cfg.Confi ...
相关推荐
主要介绍了Hibernate的Session_flush与隔离级别代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
博文链接:https://llying.iteye.com/blog/221702
session flush测试(hibernate_session_flush) 12 hihernate一对多关联映射(单向Classes----->Student) 13 hihernate一对多关联映射(双向Classes<----->Student)(常用) 14 hibernate一对多双向自连接关联映射...
013 session_flush 014 一对多关联映射 单向 015 一对多关联映射 双向 016 多对多关联映射 单向 017 多对多关联映射 双向 018 关联映射文件中标签中的 lazy(懒加载)属性 019 关联映射文件中集合标签中的 lazy(懒加载...
3、批量存储:session.flush()和session.clear() 二 Hibernate中的二级缓存结构 在Hibernate中使用两极缓存结构,第一级缓存是Session级别的缓存,Session级别的缓存是由Hibernate...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 ...
#hibernate.transaction.flush_before_completion ## Enable automatic session close at the end of transaction ## (This setting is relevant with or without the Transaction API) #hibernate.transaction....
关于在使用 hibernate 在提交事务时常遇到的异常: ...其实这个异常一般都是和我们在操作session flush方法和提交事务过程中会抛出的,下面就具体结合session的事务和声明周期来具体分析下,为什么会有这样的异常;
session.flush()和session.clear()就针对session的一级缓存的处理。 简单的说, 1 session.flush()的作用就是将session的缓存中的数据与数据库同步。 2 session.clear()的作用就是清除session中的缓存数据(不管缓存...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 ...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 ...
Session对象.flush(); //将Session中的缓存内容提交到数据库 Session对象.clear(); //清空Session中的所有缓存(彻底清除会话) Session对象.beginTransaction().begin(); //开始一个事务 4.用Session对象的以下...
ii. Session.flush(); 4. 管理session一级缓存的方法 a) Session.evict(obj)从session的一级缓存中移出一个对象 b) Session.clear() 将一级缓存中的所有对象全部清空 c) Session.close() 关闭一个session 对象的...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 ...
session.Flush() 强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush 在session关闭时也会调用flush <br>4. Hibernate总是使用对象类型作为字段类型 5. XDoclet专门建立了...
同步(Flush) Session 9.7.2. 提交数据库事务 9.7.3. 关闭Session 9.7.4. 处理异常 9.8. 生命周期和对象图(Lifecyles and object graphs) 9.9. 拦截器(Interceptors) 9.10. 元数据(Metadata) API...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 ...
10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 11.1.3. ...
14.1. 批量插入(Batch inserts) 如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 ...session.flush(); session.clear(); } } tx.commit(); session.close(); 14.2. 批量更新(Batch updates)
Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 11.1.3. ...