`
Aga
  • 浏览: 218679 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

hibernate锁实验,以及解决方案

阅读更多
	Object lock = new Object();
	
	private void transactionCollision() throws InterruptedException {
		Session session = HibernateSessionFactory.getSession();
		User ben = (User)session.get(User.class, new Long(1));
		new BranchThread().start();
		synchronized (lock) {//Before being notify the obj would be locked.
			lock.wait();
		}
		session.beginTransaction();
		ben.setNickName(ben.getNickName() + "do sth_a");
		session.getTransaction().commit();
		session.close();
	}

	private class BranchThread implements Runnable {

		public void run() {
			synchronized (lock) {
				try {
					lock.wait(2*1000);//wait 2 seconds the ensure
					// the main thread would read the dirt data.
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				lock.notifyAll();
				Session session = HibernateSessionFactory.getSession();
				User ben = (User) session.get(User.class, new Long(1));
				session.beginTransaction();
				ben.setNickName(ben.getNickName() + "do sth_b");
				session.getTransaction().commit();
				session.close();
			}
		}

		public void start() {
			new Thread(this).start();
		}

	}

典型的更新丢失问题,当然这是利用synchronized模拟的极端情况,但极端情况并不代表不发生。解决方案之一是加入乐观锁。具体操作过程如下:
entity加入一个数字类型属性,该属性与业务逻辑无关,被hibernate用作版本戳,具体如下:
	private Integer version = new Integer(0);

重新配置hbm.xml文件,将该字段应慎到数据库中
<id name="oid" type="long">
			<generator class="native" />
		</id>
		<version name="version" type="int" />

配置之后在执行上述语句会抛出:org.hibernate.StaleObjectStateException
参考文章:
http://www.360doc.com/showWeb/0/0/415808.aspx
http://www.360doc.com/showWeb/0/0/415808.aspx

以上属于乐观锁解决方案,还可以考虑悲观所解决方案;但悲观所解决方案需要一个与数据库的常链接,所以我认为,作为b/s项目,利用悲观所解决并发问题是不合理的,因为你无法保证一个常连接。
5
2
分享到:
评论
2 楼 favor 2008-09-22  
Good!Thank you!
1 楼 hifun 2008-09-17  
为什么看不懂。

相关推荐

    Hibernate上机实验1

    通过实验,我们将学习如何配置Hibernate、创建实体类、编写映射文件以及执行基本的CRUD操作。 首先,让我们了解Hibernate的核心概念。Hibernate是一种开源的ORM框架,它通过XML或注解方式将Java对象映射到关系型...

    很不错的Hibernate解决方案.pdf

    在此背景下,《很不错的Hibernate解决方案》一文介绍了一种基于Hibernate框架的物流系统持久层解决方案,旨在解决当前物流系统中存在的问题,并提升整体性能。 #### Hibernate框架简介 Hibernate是一种开放源代码的...

    Hibernate 多数据库支持解决方案

    未来 Hibernate是一个强大的Java持久化框架...以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过良好的设计和测试,可以确保Hibernate应用程序在多种数据库环境下稳定运行。

    Hibernate锁机制_悲观锁和乐观锁

    Hibernate 锁机制_悲观锁和乐观锁 Hibernate 锁机制是指在数据库访问中,为了维护数据的一致性和正确性,所采取的一些机制来防止数据的并发访问和修改。 Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁...

    hibernate实验

    Hibernate 实验手册 Hibernate 是一个基于 Java 的持久化框架,提供了一个简单的方式来将 Java 对象持久化到关系数据库中。下面是 Hibernate 实验手册的详细介绍: 1. 创建数据库和表 在实验中,我们首先创建了...

    hibernate的乐观锁和悲观锁

    ### Hibernate的乐观锁和悲观锁 #### 一、引言 在软件开发中,尤其是在涉及大量并发操作的应用场景下,确保数据的一致性和完整性是非常重要的。对于基于Java Web的应用而言,Hibernate作为一款流行的ORM框架,提供...

    Hibernate乐观锁和悲观锁分析

    【Hibernate乐观锁与悲观锁详解】 在开发过程中,尤其是在并发环境下,确保数据的一致性和完整性至关重要。Hibernate,作为Java领域广泛使用的ORM框架,提供了一种处理并发数据访问冲突的手段,那就是锁机制。主要...

    Hibernate悲观锁和乐观锁的实现

    在进行Hibernate的测试时,可以创建一个名为`hibernate_test`的项目,编写对应的实体类、映射文件以及测试用例,模拟并发场景,来深入理解并对比悲观锁和乐观锁的差异和效果。 总之,理解并合理运用悲观锁和乐观锁...

    hibernate基础实验

    掌握Hibernate的基本功能和基本用法 通过Hibernate将一个Java对象插入到数据库表中 (1) Hibernate是一个面向Java环境的对象/关系数据库映射工具,Hibernate不仅管理Java类型到数据库表的映射,还提供查询数据和...

    hibernate的中文问题的解决方案

    ### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...

    hibernate常见错误解决方案

    ### Hibernate常见错误解决方案 在开发基于Hibernate框架的应用程序时,我们经常会遇到各种各样的异常情况。这些异常不仅会影响系统的正常运行,还可能增加调试难度。本文将针对几个常见的Hibernate异常进行详细...

    Hibernate下数据批量处理解决方案

    总的来说,虽然ORM框架在处理大数据时可能存在性能挑战,但通过合理配置和使用批处理、游标滚动以及适时的缓存管理,我们可以克服这些挑战,使Hibernate在批量数据处理中发挥高效的作用。在实际项目中,还应结合...

    hibernate乐观锁和悲观锁学习

    本文主要讨论的是Hibernate框架中两种锁机制的使用:乐观锁和悲观锁。 首先,让我们深入理解悲观锁(Pessimistic Locking)。悲观锁正如其名字所示,假设并发环境中数据会被频繁修改,所以在整个数据处理过程中,它...

    解决在同一项目中Hibernate与Mybatis共存的问题的解决方案.docx

    Hibernate封装了很多有用的API给开发者,降低了操作数据库的难度和复杂度,同时也减少了模板代码的数量,但Hibernate留给开发者可操作的空间相对Mybatis少了很多。 Mybatis框架使用起来很灵活,开发者可以自定义查询...

    Hibernate的乐观锁与悲观锁

    本文将详细介绍这两种锁的原理、应用场景以及如何在Hibernate中实现。 #### 二、悲观锁(Pessimistic Locking) ##### 2.1 定义 悲观锁是一种较为传统的锁机制,它假定并发冲突的可能性很高,因此在整个数据处理...

    HibernateSpring多数据库解决方案.doc

    总结起来,这个多数据库解决方案利用Spring的IoC容器管理和配置了多个数据源,同时结合Hibernate提供了ORM功能。通过`OpenSessionInView`模式,确保了Web请求中的持久化操作能在合适的Session上下文中进行。这样的...

    Struts+Spring+Hibernate通用分页解决方案

    在分页解决方案中,Spring可以帮助管理Bean的生命周期,以及协调Struts和Hibernate之间的通信。 3. **Hibernate框架**:Hibernate是一个对象关系映射(ORM)工具,它允许开发者使用Java对象来操作数据库记录,简化...

    javaee实验五 大学本科生 hibernate

    【JavaEE实验五:大学本科生Hibernate】实验主要目标在于让学生掌握Hibernate开发环境的搭建,理解ORM框架的概念,以及深入理解Hibernate映射文件和配置文件的使用。Hibernate是一个强大的ORM(对象关系映射)框架,...

Global site tag (gtag.js) - Google Analytics