`
penghao122
  • 浏览: 363951 次
  • 性别: Icon_minigender_1
  • 来自: 广东珠海
社区版块
存档分类
最新评论

hibernate 全面学习【悲观锁和乐观锁 学习】

阅读更多
乐观锁:
大多数基于数据版本(version)记录机制实现,一般通过在数据库表中增加一个version字段实现
读取数据时将版本号一同读出,之后更新时对版本号加一。如果提交的数据小于数据库中当前版本号,
则认为是过期数据,否则给予更新。


悲观锁测试

悲观锁的实现,通常依靠数据库提供的机制,在整个处理过程中,将数据处于锁定状态;

例如:
select * from t_user where name="张三" for update

<hibernate-mapping>
	<class name="com.bjsxt.hibernate.User" optimistic-lock="version">
		<id name="id">
			<generator class="uuid"/>
		</id>
		<version name="version"/>
		<property name="name"/>
		<property name="password"/>
		<property name="createTime"/>
		<property name="expireTime"/>
	</class>
</hibernate-mapping>


package com.bjsxt.hibernate;

import java.util.Date;

import org.hibernate.LockMode;
import org.hibernate.Session;

import junit.framework.TestCase;

public class PessimisticLockingTest extends TestCase {

	public void testUpdate1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			User user = (User)session.load(User.class, "4028808114389f880114389f8ba50001", LockMode.UPGRADE);
			System.out.println("name=" + user.getName());
			System.out.println("password=" + user.getPassword());
			user.setPassword("a");
			session.update(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}		
	}
	
	public void testUpdate2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			User user = (User)session.load(User.class, "4028808114389f880114389f8ba50001", LockMode.UPGRADE);
			System.out.println("name=" + user.getName());
			System.out.println("password=" + user.getPassword());
			user.setPassword("b");
			session.update(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}		
	}	
	
}



分享到:
评论

相关推荐

    hibernate最新学习手册

    本学习手册全面涵盖了Hibernate的最新知识点,旨在帮助程序员更好地理解和运用这一强大的工具。 一、Hibernate概述 Hibernate是Java平台上的一个开源ORM框架,它允许开发者将数据库操作转化为对Java对象的操作,...

    Hibernate学习资料

    - **锁机制**:为了处理并发问题,Hibernate提供了悲观锁和乐观锁机制,帮助开发者控制并发访问数据库时的数据一致性。 #### 缓存管理 Hibernate支持二级缓存,可以显著提高数据读取速度,减少对数据库的直接访问...

    hibernate五天学习笔记(txt)

    我们还会学习如何处理并发问题,如乐观锁和悲观锁的使用,以及事务的管理,包括@Transactional注解的使用和事务的隔离级别。 此外,笔记可能还会涉及Hibernate的其他功能,如一对一、一对多、多对一、多对多的关系...

    Hibernate学习笔记

    悲观锁和乐观锁是解决并发问题的两种策略,Hibernate也提供了相应的支持。 Hibernate与Java持久化API(JPA)的集成是通过annotation方式完成的,这使得Hibernate更加符合Java标准。监听器方面,Hibernate提供了...

    深入浅出Hibernate完整版

    事务管理是任何数据库操作中不可或缺的一部分,文档不仅阐述了基于JDBC和JTA的事务管理策略,还深入分析了悲观锁和乐观锁的原理,帮助读者掌握如何在并发环境下正确地管理数据的一致性和完整性。 #### 分页与缓存...

    hibernate经典教材从入门到精通(共四篇)

    此外,事务管理和并发控制也是重要的内容,如乐观锁和悲观锁的概念及其在Hibernate中的应用。 第四篇通常会涵盖一些实战和最佳实践,如性能优化技巧,如何减少数据库访问次数、提高查询效率,以及如何避免常见的...

    hibernate电子书小压缩包

    还有,乐观锁和悲观锁机制,用于并发控制,保证数据的一致性。 在实际项目中,我们还需要考虑事务管理。Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理方式,可以很好地与...

    hibernate5.0中文文档

    此外,还会讨论乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)的实现方法。 除此之外,文档还会介绍第二级缓存(Second Level Cache)和查询缓存(Query Cache),这两种缓存机制能显著提升应用程序...

    Hibernate4.1.11中文手册

    同时,也会讨论乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)的使用场景和实现方法。 查询是Hibernate的重要功能,手册会详细讲解HQL和Criteria API的用法。HQL类似于SQL,但更为面向对象,可以...

    hibernate3 chm 格式 中文

    11. **事务与并发控制**:讨论Hibernate的事务管理,以及乐观锁、悲观锁等并发控制策略。 12. **事件监听与拦截器**:介绍如何使用事件监听器和拦截器进行自定义行为扩展。 13. **性能优化**:提供一些最佳实践和...

    Hibernate 3.2 中文参考

    - **高级特性**:学习Hibernate的高级特性,如懒加载、延迟初始化、乐观锁和悲观锁等,以及如何利用这些特性解决并发控制和性能优化问题。 ### 学习资源 为了达到以上学习目标,建议参考以下资源: 1. **官方文档...

    Hibernate In Action

    书中会阐述Hibernate的事务策略,包括JTA和JDBC事务,以及如何处理并发问题,如乐观锁和悲观锁的实现。 除了基本功能外,本书还将涉及更高级的主题,如性能优化、第二级缓存的使用、HQL(Hibernate查询语言)和SQL...

    Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题

    以上只是Hibernate众多知识点的一部分,实际面试中可能涉及更多细节,如级联操作、事务隔离级别、延迟加载机制、乐观锁和悲观锁的区别等。熟悉并理解这些内容对于通过Hibernate相关的面试至关重要。

    Hibernate Developer Guide

    文档详细讲解了乐观锁和悲观锁的实现,包括版本号和时间戳机制。 ### 缓存 缓存是Hibernate中一个关键特性,用来减少数据库的访问频率,提高性能。文档将讨论查询缓存、查询缓存区域以及二级缓存提供者。 从上述...

    Hibernate3.2官方中文参考手册

    事务并发控制是多用户环境下的必备知识,手册会讲解Hibernate的事务管理,包括如何使用JTA和JDBC事务,以及乐观锁和悲观锁的概念和使用场景,以确保数据的一致性和完整性。 批量处理部分将指导读者如何高效地执行大...

    Hibernate5 的用户手册中文版

    锁章节讲解了乐观锁和悲观锁的使用和管理,包括乐观锁的版本号和时间戳机制,悲观锁的使用以及LockMode类的介绍。 9. Fetching(抓取): 抓取章节介绍了抓取策略,包括不抓取、通过查询动态抓取以及通过配置文件...

    Spring整合HIbernate

    7. **版本控制**:利用Hibernate的乐观锁或悲观锁机制,保证数据一致性。 通过以上步骤和实践,我们可以有效地整合Spring和Hibernate,构建出高效且易于维护的Java应用。在实际开发中,还需要根据项目需求灵活调整...

    HIBERNATE官方参考手册

    20. **实体的版本控制(Versioning)**:通过乐观锁或悲观锁实现并发控制,防止数据冲突。 通过深入阅读《Hibernate官方参考手册》,开发者可以全面掌握Hibernate的使用方法,从而高效地开发Java应用程序的数据访问...

    hibernate 2

    与悲观锁(Pessimistic Locking)相比,乐观锁假设多个事务在处理数据时不会发生冲突,只有在事务提交时,才通过版本号检查数据是否被其他事务修改过。如果在事务提交时发现数据已经过期,则该事务会被回滚。 在...

Global site tag (gtag.js) - Google Analytics