Hibernate 缓存策略
一级缓存: session , hibernate 的自主缓存
二级缓存( Ehcache )
Read-only
Nonstrict-read-write
Read-write( 关键事务 )
Transactional( 事务型缓存 <Ehcache 不支持此模式 >)
二级缓存还有 JbossCache 的,它支持事务型缓存,但是 Jboss 的资料很难得,还是开源的 Ehcache 对我的口味,并且他作为 hibernate 的默认缓存策略,表现实在也很不错的 J
Ehcache 在 Spring+hibernate 的应用中是很简单的,只要声明 Ehcache 的缓存管理器,并且定义 ehcache 的 xml 文件就可以了。
Hibernate 锁策略
Hibernate 内部锁机制
LockMode.NONE 无锁机制
LockMode.WRITE hibernate 进行保存和更新时自动使用的锁机制。
LockMode.READ hibernate 读取纪录时的机制
悲观锁
整个数据处理过程中,将数据处于锁定
状态。悲观锁的实现,往往依靠数据库提供的锁机制
LockMode.UPGRADE
LockMode.UPGRADE_NOWAIT
实现机制如下:
Criteria.setLockMode
Query.setLockMode
Session.lock
乐观锁
Why 乐观锁?
更加宽松的加锁机制,悲观锁对长事务而言,开销往往无法承受;避免死锁。
实现机制:
Version
Dirty
ALL
主要介绍 Version
官方推荐的乐观锁实现策略,广泛使用,具有经验可借鉴性
实现举例:在每一次进行读取操作时取出版本号,在进行更新时同时刷新版本号,更新时只能更新低版本的数据,从而完成锁策略。 Hibernate 的 Session 会在等待用户交互时 ,Session 断开数据库连接。在整个应用事务过程中, Hibernate 使用单例 Session 和单例类来实现。
使用方法:
<class name="mtn.gfkd.spring.model.TUser" table="T_USER" schema="SPRINGDEV" optimistic-lock="version">
< 主键 >
<version
column="version"
name="version"
type="java.lang.Integer"
/>
同时数据库表中增加字段 à version
总结:在一般性的事务中,大可将锁机制抛开不用,这样不可否认增加了复杂性,你不得不面对不少的版本异常信息,只有在涉及关键业务如进行网上购物的付款等就必须进行加锁管理,当然推荐基于 version 的乐观锁管理。
Hibernate 数据加载
Session.createQuery.list()
Session.createQuery. iterate() à 遍历, sql 语句执行为 1 , 1 , 1 为什么还要选用他?
Session.get/Load
区别何在?
Session 缓存 / 一、二级缓存
QueryCache 机制
Hibernate 批量数据处理
主要问题在于批量操作后的缓存问题!
批量删除例子:
Query query=session.createQuery(delete TUser)
Int ret=query.executeUpdate();
通过高效的 JDBC 接口批量删除数据后, Session 中的缓存,二级缓存并没有清除!!
此时的 session.load(TUser,1) 还有数据,显然需要手工的处理。
一个小小的规则
One-many 配置时, inverse 属性的设置总是将 many 一方设置为主控方( inverse=false )
区分 cascade 与 inverse 的区别
Cascade à 级连关系
Inverse à 关系维护控制方向
n 没有工具可以限制我们,限制我们的仅仅是我们自己的想象力而已。
分享到:
相关推荐
非常好的学习Hibernate 资料。探讨Hibernate 缓存机制深入浅出,适合有一定开发经验的人作为学习和参考资料。
《Struts Hibernate Spring集成开发宝典》对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。 编辑推荐 《Struts Hibernate Spring集成开发宝典》的配套光盘中包含了...
内容简介 《Struts Hibernate Spring集成开发宝典》以Struts,Hibernate,...《Struts Hibernate Spring集成开发宝典》对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。
本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高...
本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
. 本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使读者在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来...
基于J2EE的客户关系管理系统的设计与实现 毕业论文 针对客户关系管理系统以“服务客户为中心”的设计思想,提出了基于J2EE 的...等,进行了深入的探讨和应用实践,提出了客户关系管理系统设计原型和技术实现方法。
本书由Scala之父作序推荐,深入探讨了Scala里几个较为复杂的领域,包括类型系统的高阶内容、隐式转换、特质的组合技巧、集合、Actor、函数式编程的范畴论等,而且不是干巴巴地讲述语言和库的概念。本书示例丰富,是...
本书全面而深入地探讨了Java技术的高级特性,包括许多与Java语言相关的开源技术,如Ant、Jmeter、Hibernate等。全书共14章,其中前3章介绍了高效Java开发人员所需的特定思维方式,包括关键的Java语言特性和库、用于...
作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...
本书对每一个组件的讲解都是以入门级实例开始的,然后对组件的架构以及各方面的功能进行了深入的探讨。这样安排的好处是使学员在具备了初步知识的基础上对组件进行更深入的理解,并通过一系列贴近实际的实例来提高...