`
隐形的翅膀
  • 浏览: 486629 次
  • 性别: 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乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解

    hibernate乐观锁和悲观锁学习

    其中通过 version 实现的乐观锁机制是 Hibernate 官方推荐的乐观锁实现,同时也是 Hibernate 中,目前唯一在数据对象脱离 Session 发生修改的情况下依然有效的锁机制。因此,一般情况下,我们都选择 version 方式...

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

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

    hibernate的乐观锁和悲观锁

    hibernate的乐观锁和悲观锁,两种锁搞定一切

    Hibernate悲观锁和乐观锁的实现

    NULL 博文链接:https://12345678.iteye.com/blog/721836

    Hibernate的乐观锁与悲观锁

    Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。

    Hibernate乐观锁

    学习hibernate的必备知识,当你学习hibernate时,就会对锁的概念有一定的了解了.

    Hibernate悲观锁与乐观锁

    很好的描述Hibernate的悲观锁和乐观锁,

    Hibernate悲观锁与乐观锁案例

    Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。

    Hibernate version 乐观锁 (xml方式)

    NULL 博文链接:https://tgwall163.iteye.com/blog/1291892

    Hibernate中Criteria的完整用法

    Hibernate 中 Criteria 的完整用法 Hibernate 的 Criteria 是一种强大且灵活的查询机制,允许开发者根据需求灵活地组装查询条件。Criteria 的设计是基于 CriteriaSpecification 父接口,提供了 Criteria 和 ...

    hibernate乐观锁

    乐观锁 求助编辑百科名片相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库 性能的大量开销,特别是对长事务而...

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

    NULL 博文链接:https://cdxs2.iteye.com/blog/1938245

    hibernate的三锁

    该资源主要是分析:乐观锁解决事务并发.乐观锁校验测试, 基于hiber管理的悲观锁实现

    hibernate锁详解

    hibernate利用锁的相关功能详解,分为乐观锁和悲观锁。希望各位喜欢。

    Hibernate悲观锁和乐观锁实例详解

    主要介绍了Hibernate悲观锁和乐观锁实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Hibernate学习笔记

    001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate ...025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    Hibernate实现悲观锁和乐观锁代码介绍

    主要介绍了Hibernate实现悲观锁和乐观锁的有关内容,涉及hibernate的隔离机制,以及实现悲观锁和乐观锁的代码实现,需要的朋友可以了解下。

Global site tag (gtag.js) - Google Analytics