`
隐形的翅膀
  • 浏览: 497028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 中的锁

阅读更多
1. 如何支持this.sessionFactory.getCurrentSession()

   在SessionFactory 的配置中
   
    <property name="hibernateProperties">
       <props>
          <prop key="hibernate.current_session_context_class">
              thred
          </prop>
          <prop key="hibernate.transaction.factory_class">
              org.hibernate.transaction.JDBCTransactionFactory
          </prop>
       </props>
    </property>
   

   添加此配置后,必须在code中使用transaction
  
   public List<LogEntry> getAll(){
      Transaction transaction=this.sessionFactory.getCurrentSession().beginTransaction();
      try{
         return this.sessionFactory.getCurrentSession().createQuery("from LogEntry").list();
      }finally{
         transaction.commit();
      }
   }


  public List<LogEntry> getByName(String name){
      Transaction transaction=this.sessionFactory.getCurrentSession().beginTransaction();
      try{
         return this.sessionFactory.getCurrentSession().createQuery("from LogEntry where name=:name").setParameter

("name",name).uniqueResult();
      }finally{
         transaction.commit();
      }
   }
   

2. 线程A 和 B 各从数据库中加载同一行数据,线程A先更新数据,保存,然后线程B更新数据,这时就会有脏数据产生.

   悲观锁: 线程A可以整行加锁,从而使得只有A更新完数据,B才能从数据库中加载数据,此方法为悲观锁
  
   乐观锁: 如果执行的读操作比写操作多,最好将行释放,使用乐观锁.

3. hibernate中乐观锁的实现:
    在数据库表中增加一列 : version,  default value : null , long
    在HIBERNATE的*.hbm.xml文件中

    ................
    <version name="version" column="version" unsave-value="null" type="long"
    <property name="name" column="name" not-null="true"/>
     ...............
     每做一次更新,version 会自动加1, 这样当线程A更新完后, version=version+1, 线程再更新时 version 会不同,会有异常抛出

4.  可以通过比较对象ID和 VERSION同时相等,来确认内存中的两个对象相等。
分享到:
评论

相关推荐

    Hibernate乐观锁和悲观锁分析

    在Hibernate中,悲观锁可以通过`Query.setLockMode()`或`Criteria.setLockMode()`方法设置锁模式。例如: ```java String hqlStr = "from TUser as user where user.name='Erica'"; Query query = session....

    Hibernate悲观锁和乐观锁的实现

    在Hibernate源码中,乐观锁的实现主要依赖于`AbstractEntityPersister`类的`checkOptimisticLocking()`方法,它会比较当前对象的版本信息与数据库中的版本信息,如果不同则抛出`StaleObjectStateException`异常。...

    hibernate的乐观锁和悲观锁

    **Hibernate中的悲观锁实现**: 在Hibernate中,可以通过`Query.setLockMode()`方法来实现悲观锁。例如: ```java String hqlStr = "FROM TUser AS user WHERE user.name = 'Erica'"; Query query = session....

    hibernate乐观锁和悲观锁学习

    在悲观锁中,Hibernate提供了多种锁模式,如`LockMode.NONE`、`LockMode.WRITE`、`LockMode.READ`等,这些主要由内部使用。而`LockMode.UPGRADE`和`LockMode.UPGRADE_NOWAIT`(Oracle特有的)则是我们在应用程序中...

    Hibernate乐观锁

    在Hibernate中,实现乐观锁的一种常见方式是通过版本字段(version field)来追踪数据的版本。当数据被读取时,版本字段会被一同获取;在更新时,Hibernate会将当前版本与数据库中的最新版本进行比较。如果两个版本...

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

    Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁(Pessimistic Locking) 悲观锁是一种预防并发访问的机制,Hibernate 通过对数据库的锁定来实现。悲观锁假定任何时刻存取数据时,都可能有另一个客户也...

    Hibernate的乐观锁与悲观锁

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

    Hibernate悲观锁与乐观锁

    Hibernate推荐的乐观锁实现是通过在实体类中添加一个版本字段,每次数据更新时,若版本号与数据库中的版本号匹配,更新成功并递增版本号;若不匹配,则表示数据已被其他用户修改,更新操作将失败。这通常通过`...

    数据库事务、hibernate悲观锁和乐观锁

    在《hibernate_3200_Concurrency_Pessimistic_Lock》这个压缩包中,很可能包含了关于Hibernate框架如何实现悲观锁和乐观锁的详细资料,包括源代码示例、配置方法和使用场景。通过学习这些资料,你可以深入了解这两种...

    Hibernate悲观锁与乐观锁案例

    在Java的持久化框架Hibernate中,悲观锁和乐观锁是两种重要的并发控制策略,它们用于管理数据库中的数据在多线程环境下的访问安全。本文将深入探讨这两种锁机制的原理、应用场景及其区别。 首先,我们来理解悲观锁...

    hibernate中文帮助文档

    乐观锁定版本控制:通过`@Version`注解,Hibernate可以实现乐观锁,防止并发更新时的数据冲突。 2.2.2. 映射简单属性和嵌入式对象:使用`@Column`注解映射简单属性,如字符串、整数等。`@Embeddable`和`@Embedded`...

    Hibernate5中文用户使用手册

    还讨论了并发控制中的乐观锁和悲观锁。 JNDI和锁:JNDI(Java Naming and Directory Interface)用于在Java应用程序中访问命名和目录服务。锁部分则介绍了乐观锁和悲观锁的概念及其使用方法。 Fetching(抓取):...

    hibernate中文参考文档

    ### Hibernate中文参考文档知识点概述 ...通过以上对Hibernate知识点的详细介绍,可以帮助开发人员更好地理解和掌握其核心技术,从而在实际项目中更加高效地运用Hibernate解决复杂的数据库操作问题。

    Hibernate version 乐观锁 (xml方式)

    在Hibernate中,乐观锁的处理主要在`org.hibernate.event.internal.DefaultMergeEventListener`和`org.hibernate.event.internal.DefaultUpdateEventListener`这两个事件监听器中完成。当调用`Session.merge()`或`...

    hibernate5.0中文文档

    在Hibernate 5.0中,这个框架进一步提升了性能和易用性,引入了许多新的特性和改进。 文档首先会介绍Hibernate的基本概念,包括实体(Entity)、持久化(Persistence)、对象关系映射(ORM)以及Session和...

    hibernate3 chm 格式 中文

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

    hibernate锁实验,以及解决方案

    4. ** Hibernate锁的使用** - `Session.lock()`: 将对象锁定在指定的锁模式下。 - `Query.setLockMode()`: 对查询结果应用锁模式。 - `Criteria.setLockMode()`: 同上,针对Criteria查询。 5. **实验情况** - ...

    Hibernate 乐观和悲观锁

    标题中的“Hibernate 乐观和悲观锁”涉及到的是Java领域中持久化框架Hibernate中的一种数据并发控制策略。在多线程环境下,为了保证数据的一致性和完整性,数据库管理系统提供了多种锁定机制,其中乐观锁和悲观锁是...

    Hibernate4.1.11中文手册

    《Hibernate4.1.11中文手册》是针对Java开发者的重要参考资料,它详细阐述了Hibernate框架在4.1.11版本中的各项功能和用法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来...

Global site tag (gtag.js) - Google Analytics