`

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 , 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注释的使用。 1. **属性和方法注解** Hibernate允许对类的属性或方法进行注解,以声明它们与数据库表的对应关系。属性注解通常使用`@Column`,它指定了字段在数据库表中的列名、是否...

    孙卫琴精通hibernate part3

    《孙卫琴精通Hibernate Part3》是对知名数据库框架Hibernate深入探讨的系列教程的第三部分,主要涵盖的内容可能包括但不限于高级查询、性能优化、缓存策略、关联映射、多对多关系、一对多关系、一对一关系等核心主题...

    Hibernate深入浅出

    《Hibernate深入浅出》是一本专门针对Java开发者深入理解Hibernate框架的重要参考资料。Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互,将复杂的SQL操作隐藏在对象...

    深入浅出Hibernate完整版

    这部分深入探讨了Hibernate的核心概念,如`Configuration`、`SessionFactory`和`Session`等,并介绍了Hibernate的高级特性,包括XDoclet映射、数据检索策略、数据关联管理和数据访问模式。特别是对HQL(Hibernate ...

    深入浅出Hibernate(含源码)

    《深入浅出Hibernate》这本书籍结合源码分析,不仅讲解了Hibernate的基本概念和使用方法,还深入探讨了其高级特性及优化技巧,是学习和掌握Hibernate的优秀资源。通过阅读这本书,读者可以更好地理解和运用Hibernate...

    夏昕.深入浅出Hibernate.rar

    《深入浅出Hibernate》是夏昕撰写的一本关于Hibernate框架的经典教程,对于想要掌握Hibernate技术的开发者来说,这本书无疑是一份宝贵的资源。Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java...

    .Struts2整合Hibernate深入详解

    《Struts2整合Hibernate深入详解》是一篇针对Java开发者的重要教程,主要探讨如何在Web应用程序中有效地结合两个流行的技术框架——Struts2和Hibernate。Struts2是一个强大的MVC(Model-View-Controller)框架,提供...

    深入浅出hibernate,需要的下载

    下面将从几个关键知识点来探讨Hibernate的核心概念和技术。 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,它将Java类与数据库表进行映射,通过对象的增删改查操作实现对数据库的数据操作。ORM消除了低级...

    hibernate_flush 深入了解

    本文将深入探讨Hibernate的Flush过程,以及它如何与数据库事务和隔离级别相互作用。 首先,我们需要明确什么是Hibernate的Flush操作。Flush是Hibernate将内存中的对象状态同步到数据库的过程。当Session中的对象被...

    深入浅出Hibernate

    接着,书籍深入探讨了Hibernate的会话和事务管理,这是使用Hibernate进行数据库操作的关键。书中详细讲解了会话的概念、事务的ACID属性、以及如何在代码中处理事务。读者将学会如何确保数据的一致性和完整性。 此外...

    Hibernate缓存深入详解

    本文将深入探讨Hibernate的缓存机制,包括一级缓存和二级缓存,以及它们的应用和优化。 **1. Hibernate缓存概述** Hibernate缓存主要位于持久化层,它的作用是减少对数据库的直接访问,提高数据读取速度。缓存中...

    深入浅出hibernate

    在本篇文章中,我们将深入探讨Hibernate的核心概念、关键特性以及实际应用。 一、Hibernate简介 Hibernate是一个基于Java的持久化框架,它简化了Java应用与关系数据库之间的交互。通过提供对象-关系映射(ORM)功能...

    hibernate3 hibernate3

    在本篇文章中,我们将深入探讨Hibernate3的核心概念、主要功能以及如何在实际项目中应用。 一、Hibernate3核心概念 1. 实体(Entity):在Hibernate中,实体代表数据库中的表,是Java类的一个实例。通过在类上使用...

    Hibernate缓存机制探讨

    本文将深入探讨Hibernate的缓存机制,帮助开发者理解如何有效地利用缓存提高应用性能。 首先,我们需要了解缓存的基本概念。缓存是一种存储技术,用于临时存储经常访问的数据,以减少对主存储器(如硬盘或网络)的...

    hibernate aip hibernate aip

    在这个过程中,我们将深入探讨Hibernate的核心概念、工作原理以及如何在实际项目中有效地运用Hibernate AIP。 首先,让我们理解Hibernate的基础知识。Hibernate是一种开源的ORM框架,它通过映射Java类到数据库表,...

Global site tag (gtag.js) - Google Analytics