`
NistCK
  • 浏览: 38525 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Hibernate持久化的实现——锁

阅读更多

(1),悲观锁---依靠数据库层提供的锁机制。

String hqlStr = "from TUser as user where user.name='Erica'"; 
Query query = session.createQuery(hqlStr); 
query.setLockMode("user",LockMode.UPGRADE);//加锁(for update) 
List userList = query.list();//执行查询,获取数据 

 

query.setLockMode对查询语句中,特定别名(user)所对应的记录进行加锁。

Hibernate的加锁模式(Hibernate内部使用)有:
LockMode.NONE:无锁机制
LockMode.WRITE:Hibernate在Insert和Update记录的时候会自动获取。
LockMode.READ:Hibernate在读取记录的时候会自动获取。
依赖数据库的悲观锁机制(应用层):
LockMode.UPGRADE:利用数据库的for update子句加锁。
LockMode.UPGRADE_NOWAIT:Oracle的特定实现,利用Oracle的for update nowait子句实现加锁。
注意:应该查询开始之前设定加锁。

(2),乐观锁
---大多是基于数据版本记录机制实现。
数据版本:即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。
乐观锁策略:提交版本必须大于记录当前版本才能执行更新。

添加一个Version属性描述符

<hibernate-mapping> 
  <class name="TUser" table="T_USER" dynamic-update="true" dynamic-insert="true" optimistic-lock="version"> 
    <id></id> 
    <version column="version" name="version" type="java.lang.Integer"/> 
  </class> 
</hibernate-mapping> 

 

注意:version节点必须出现在ID节点之后。
违反乐观锁策略时:tx.commit()处抛出StaleObjectStateException异常,并指出版本检查失败,当前事务正在试图提交一个过期数据。通过捕捉这个异常,我们就可以在乐观锁校验失败时进行相应处理。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    7.1.1Hibernate的入门必备——文档和源码

    此外,学习Hibernate的重要部分还包括了解Hibernate的持久化操作,如保存(save())、更新(update())、删除(delete())和加载(get()、load())对象。还要掌握HQL(Hibernate Query Language),它是Hibernate提供的...

    struts2+hibernate整合的例子——新闻管理系统

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们分别负责表现层和持久层的管理。Struts2是一款强大的MVC(Model-View-Controller)框架,它为Web应用程序提供了一种组织业务逻辑和控制流程的方式。而...

    Hibernate 对象持久化

    **Hibernate对象持久化** 在Java开发中,数据库操作是不可或缺的一部分。Hibernate作为一种强大的ORM(对象关系映射)框架,极大地简化了Java应用与数据库之间的交互。它通过将Java类映射到数据库表,实现了对象...

    用Hibernate对象持久化服务简化Java数据库访问.pdf

    ### 使用Hibernate对象持久化服务简化Java数据库访问 #### 摘要 Hibernate作为一个高效且功能丰富的对象关系映射(ORM)框架,在Java开发领域扮演着举足轻重的角色。通过强大的映射机制,Hibernate能够将Java对象...

    MyClipse6.0\Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    《Struts2、Spring与...通过以上步骤,我们可以构建一个完整的学生成绩管理系统,该系统利用了Struts2的控制流转,Spring的业务管理和数据管理,以及Hibernate的数据持久化,实现了高效、稳定且易于维护的Web应用。

    Hibernate对象持久化状态

    本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...

    Hibernate和struts的整合架构中数据持久化技术的应用研究.pdf

    ### Hibernate和Struts的整合架构中数据持久化技术的应用研究 #### 摘要与背景 本文探讨了在企业级应用开发中,采用Hibernate和Struts整合架构进行数据持久化技术的应用研究。针对传统单一框架构建的企业应用存在...

    Hibernate——符合Java习惯的关系数据库持久化

    - **Detached**: 对象曾是持久化的,但当前Session已被关闭,对象与数据库的连接断开。 ### 5. Hibernate的映射机制 Hibernate通过XML或注解方式实现对象与数据库表的映射,主要包括以下部分: - **实体类(Entity...

    hibernate-符合Java习惯的关系数据库持久化

    “hibernate-符合Java习惯的关系数据库持久化”这一标题明确指出了我们要探讨的主题——Hibernate,这是一个非常流行的Java ORM(对象关系映射)框架,它使得Java开发者能够按照面向对象的方式来操作数据库,而无需...

    深入浅出Hibernate中文版 part1

    5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的...

    Hibernate使用——入门

    Hibernate 提供了一种在Java应用程序中持久化对象的方式,它通过映射Java类到数据库表,使得开发者可以使用面向对象的方式来处理数据,而不是传统的SQL语句。这提高了代码的可读性和可维护性。 **2. 安装与配置** ...

    Hibernate总结——课程管理

    Hibernate通过XML或注解方式定义对象和数据库之间的映射关系,提供了透明的数据持久化能力。 ### 多对多关联映射 在课程管理场景中,通常存在学生和课程之间的多对多关系。每个学生可以选修多个课程,而每门课程也...

    深入浅出Hibernate中文版 part2

    5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的...

    安卓Android源码——Hibernate4.zip

    在Android环境中,虽然SQLLite是默认的数据库系统,但通过Hibernate可以实现更灵活的数据管理和持久化。 【描述】描述中的"安卓Android源码——Hibernate4.zip"表明这是一个与Android应用开发相关的项目,其中包含...

    JSP源码——Struts+Hibernate实现MVC_strutsmvc.zip

    这个压缩包“JSP源码——Struts+Hibernate实现MVC_strutsmvc.zip”显然包含了使用这两种技术构建的MVC应用的源代码。下面将详细阐述Struts和Hibernate的核心概念以及它们如何协同工作。 **Struts框架**: 1. **MVC...

    实现自己的Hibernate框架之Session 方法实现

    在Hibernate中,Session是与数据库交互的主要接口,它负责对象的持久化、查询以及事务管理。Session的方法包括保存、更新、删除、加载、查询等,这些都是ORM框架的基础功能。 1. **保存(save())**:当新创建一个...

    Hibernate_Hospital_Database:Hibernate MySQL 小项目——医院数据库

    在这个项目中,我们探讨的是如何使用Java的持久化框架Hibernate与MySQL数据库来构建一个医院管理系统的数据库。Hibernate是一个强大的对象关系映射(ORM)工具,它允许开发者使用面向对象的方式来操作数据库,极大地...

    对象持久化技术Hibernate的应用研究.pdf

    在配置好Hibernate之后,可以通过以下步骤实现对象的持久化: 1. **定义Java实体类**:根据数据库表结构定义相应的Java实体类,每个实体类对应一个表。 2. **编写映射文件**:为每个实体类编写一个对应的`.hbm.xml`...

    孙卫琴hibernate source code2

    接着,我们来到`chapter4`,这一章节主要涉及Hibernate的实体管理和持久化操作。实体管理主要包括EntityPersister、AbstractEntityPersister和IdentifierGenerator。EntityPersister是所有持久化类的抽象接口,定义...

Global site tag (gtag.js) - Google Analytics