Hibernate深入探讨

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 为什么还要选用他?

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        没有工具可以限制我们,限制我们的仅仅是我们自己的想象力而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值