`

[SXT][WY]Hibernate12 悲观锁与乐观锁

阅读更多

悲观锁

 

悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据锁定,其它任何用户都不能读取或修改

(不支持lazy)

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjsxt.hibernate.Inventory" table="t_inventory">
  <id name="itemNo">
   <generator class="native"/>
  </id>
  <property name="itemName"/>
  <property name="quantity"/>
 </class>
</hibernate-mapping>

 

/* 第一个设置断点,在让第二个执行,可看到效果

*/

public void testLoad1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Inventory inv = (Inventory)session.load(Inventory.class, 1, LockMode.UPGRADE);
   System.out.println("itemName=" + inv.getItemName());
   System.out.println("quantity=" + inv.getQuantity());
   inv.setQuantity(inv.getQuantity() - 200);
   session.update(inv);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  } 
 }

 

public void testLoad2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Inventory inv = (Inventory)session.load(Inventory.class, 1, LockMode.UPGRADE);
   System.out.println("itemName=" + inv.getItemName());
   System.out.println("quantity=" + inv.getQuantity());
   inv.setQuantity(inv.getQuantity() - 200);
   session.update(inv);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  } 
 }

 

 

乐观锁

 

 

大多数基于数据版本记录机制(version)实现,一般是在数据库表中加入一个version字段
读取数据时将版本号一同读出,之后更新数据时版本号加一,如果提交数据时版本号小于或等于数据表中
的版本号,则认为数据是过期的,否则给予更新

(支持lazy)

 

 

public class Inventory {

 private int itemNo;
 
 private String itemName;
 
 private int quantity;
 
 private int version;
}

 

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjsxt.hibernate.Inventory" table="t_inventory" optimistic-lock="version">
  <id name="itemNo">
   <generator class="native"/>
  </id>
  <version name="version"/>
  <property name="itemName"/>
  <property name="quantity"/>
 </class>
</hibernate-mapping>

 

 public void testLoad1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Inventory inv = (Inventory)session.load(Inventory.class, 1);
   System.out.println("itemName=" + inv.getItemName());
   System.out.println("version=" + inv.getVersion());
   System.out.println("quantity=" + inv.getQuantity());
   inv.setQuantity(inv.getQuantity() - 200);
   session.update(inv);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  } 
 }

 

 

public void testLoad2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Inventory inv = (Inventory)session.load(Inventory.class, 1);
   System.out.println("itemName=" + inv.getItemName());
   System.out.println("version=" + inv.getVersion());
   System.out.println("quantity=" + inv.getQuantity());
   inv.setQuantity(inv.getQuantity() - 200);
   session.update(inv);
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  } 
 }

分享到:
评论

相关推荐

    sxt Video File

    【sxt Video File】是一种专为视频开发设计的文件格式,它被广泛应用于多媒体内容的存储和传输。这种格式可能包含一系列技术规格和编码标准,旨在优化视频质量和压缩效率,同时便于开发人员进行集成和处理。在【描述...

    SXT--RBAC权限控制系统源码

    《SXT--RBAC权限控制系统源码解析》 在信息技术领域,权限控制是系统安全的重要组成部分,它确保了用户只能访问他们被授权的资源。本文将深入探讨SXT--RBAC(Role-Based Access Control,基于角色的访问控制)权限...

    sxt.rar_sxt

    标题 "sxt.rar_sxt" 暗示我们正在处理一个RAR压缩文件,其中包含一个名为"sxt"的项目。这个文件很可能是一个使用Visual C++(VC++)编写的程序,目的是实现无须额外驱动就能访问和操作摄像头的功能。在Windows环境中...

    mikrotik SXT 网桥点对点安装

    在进行mikrotik SXT网桥点对点安装时,我们首先需要了解网桥设备以及点对点连接的定义。网桥是一种网络设备,主要用于连接两个或多个局域网(LAN)段,允许不同网络段中的设备相互通信。在无线通信领域,点对点...

    SXT_ksxt_

    很抱歉,但根据您给出的信息,标题"‘SXT_ksxt_’"和描述"‘加热后软件恶霸vi热v贵部 将二姑vUI热 进欧冠ire’"似乎包含了一些难以理解的词汇,它们可能不是标准的IT术语或者描述。标签"‘ksxt’"看起来像是简写或...

    SXT shell_SXTshell_

    【SXT Shell:一个自动化安装脚本的探索】 在IT行业中,自动化是提高效率的关键,尤其是在服务器管理和维护中。SXT Shell(SXTshell)是一个专门为实现自动化部署和配置而设计的脚本工具。它旨在简化系统管理员的...

    sxt66329PPT模板.pptx

    在"sxt66329"模板中,选择与主题相关的图标可以提升PPT的专业感。 5. **色彩搭配**: - 色彩对于PPT的整体视觉效果至关重要。商务PPT通常采用保守的颜色组合,如深蓝与白色、灰色等,以传达专业和稳重的形象。 - ...

    sxt\weblogic\weblogic安装.avi

    sxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avisxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avi

    sxt_api_14.jar

    sxt_api_14.jar,便于下载可以使用

    struts2+spring+hibernate s2sh结合方式框架搭建开发

    Spring还包含了一个强大的数据访问抽象层,如Spring JDBC和Spring ORM模块,它能与Hibernate等ORM框架无缝集成,简化数据库操作。 Hibernate是Java世界中最流行的ORM(对象关系映射)框架,它允许开发者用Java对象...

    sxt.zip_VBa_摄像头

    综上所述,"sxt.zip" 文件可能是一个包含了VBA代码的项目,该代码能够通过WIA或其他类似API与摄像头交互,实现图片的抓拍和保存。对于希望学习如何使用VBA操作摄像头的用户,这是一个有价值的资源。

    sxt.rar_c#扇形图

    扇形图通常用于表示部分与整体之间的关系,每个扇形代表整体的一部分。本资源"**sxt.rar_c#扇形图**"提供了一段代码,可以帮助开发者自定义绘制扇形统计图。 在C#中,我们可以利用GDI+(Graphics Device Interface ...

    sxt.rar_数据结构

    本资源包“sxt.rar_数据结构”中包含了关于链表算法的程序实现,通过C++语言进行编写,旨在帮助我们深入理解和实践链表的操作。 链表不同于数组,它不是一块连续的内存空间,而是由一系列节点组成,每个节点包含...

    sxt+doswin1.zip

    正是在这种背景下,刘经理推荐的“sxt+doswin1.zip”压缩包显得尤为珍贵。这个压缩包中包含了两个软件工具,它们分别是SXTPSGJ_V2.1_XiTongZhiJia和doswin1,两者结合使用,为工程师们提供了一个在DOS环境下进行图像...

    sxt.rar_c# 摄像头实例

    标题 "sxt.rar_c# 摄像头实例" 提供了一个关于使用C#编程语言进行摄像头控制的项目实例。这个实例可能是一个基础的、可运行的代码示例,用于展示如何在C#环境中访问和操作摄像头设备。下面将详细讨论C#中摄像头控制...

    pentair 5800 SXT软水机说明书

    ### Pentair 5800 SXT 软水机相关知识点 #### 一、产品概述 Pentair 5800 SXT软水机是一款高性能的家庭软水设备,适用于去除水中硬度矿物质(如钙、镁等),有效改善水质,减少水垢形成,保护家庭用水设备不受损害...

    sxt.rar_sxt_手写_手写 识别_手写体 识别_文字识别

    《手写体文字识别技术深度解析》 在数字化时代的今天,手写体文字识别技术扮演着日益重要的角色,尤其在教育、文档管理、个人笔记数字化等领域。本文将深入探讨一个基于C++实现的手写体文字识别系统,以及相关的新...

    sxt.rar_dll_pb9_pb9示例

    这些接口必须与调用方一致,否则会导致调用失败。 3. 配置PB9:在PowerBuilder中,要调用DLL,需要在代码中设置正确的路径和函数声明。可以通过`LoadLibrary`函数加载DLL,并使用`GetProcAddress`获取函数指针。...

    sxt.rar_bmp_matlab采集图片

    在IT领域,尤其是在计算机视觉和图像处理中,"sxt.rar_bmp_matlab采集图片"这一主题涉及到如何使用MATLAB编程语言从摄像头捕获实时图像并将其保存为BMP格式的图片。MATLAB是一款强大的数学计算软件,同时也提供了...

Global site tag (gtag.js) - Google Analytics