• 博客园
  • 首页
  • 新随笔
  • 联系
  • 管理
  • 订阅

hibernate中session的线程安全问题

Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Session管理下才能同步到数据库, 
但是这里的Session并非指HttpSession,可以理解为基于JDBC的Connnection,Session是 Hibernate运作的中心, 
对象的生命周期、事务的管理、数据库的存取都与Session息息相关,首先,我们需要知道, 
SessionFactory负责创建Session,SessionFactory是线程安全的,多个并发线程可以同时访问一个 
SessionFactory 并从中获取Session实例。

而Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取, 
则将会导致 Session 数据存取逻辑混乱.因此创建的Session实例必须在本地存取空上运行, 
使之总与当前的线程相关。这里就需要用到ThreadLocal,在很多种Session 管理方案中都用到了它.

ThreadLocal 是Java中一种较为特殊的线程绑定机制,通过ThreadLocal存取的数据, 
总是与当前线程相关, 
也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出现的并发访问问题提供了一种隔离机制,ThreadLocal并不是线程本地化的实现,而是线程局部变量。也就是说每个使用该变量的线程都必须为该变量提供一个副本,每个线程改变该变量的值仅仅是改变该副本的值,而不会影响其他线程的该变量的值,ThreadLocal是隔离多个线程的数据共享,不存在多个线程之间共享资源,因此不再需要对线程同步。

分类: JAVA

转载于:https://www.cnblogs.com/hualishu/p/7575699.html

HIbernate Session 线程安全的问题相关推荐

  1. Hibernate Session的delete()方法

    本文介绍Hibernate Session的delete()方法.delete()方法用于从数据库中删除与Java对象对应的记录.对应游离对象和持久化对象,delete语句会做出不同的反应. dele ...

  2. Could not open Hibernate Session for transaction;

    javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...

  3. Spring下没有配置事务导致hibernate session报错

    2019独角兽企业重金招聘Python工程师标准>>> org.hibernate.HibernateException: No Hibernate Session bound to ...

  4. Hibernate Session get()vs load()的区别

    Hibernate Session get()vs load()的区别 Hibernate Session提供了从数据库中获取数据的不同方法.其中两个是 - get()和load().我们还可以在不同 ...

  5. Hibernate Session merge,update,save,saveOrUpdate,persist

    Hibernate Session merge,update,save,saveOrUpdate,persist Hibernate Session是java应用程序和hibernate框架之间的接口 ...

  6. Hibernate Session get()vs load()实例差异

    Hibernate Session provide different methods to fetch data from database. Two of them are – get() and ...

  7. Hibernate Session合并,更新,保存,saveOrUpdate,持久化示例

    Hibernate Session is the interface between java application and hibernate framework. Today we will l ...

  8. Could not open Hibernate Session for transaction, 数据库连接超时解决方法

    异常: javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException ...

  9. Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Generi

    spring hiberate项目启动没有报错,访问服务时突然报错500:Could not open Hibernate Session for transaction; nested except ...

  10. Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Gener

    今天整合ssh 项目遇到的错误: ERROR SqlExceptionHelper Cannot create PoolableConnectionFactory (Access denied for ...

最新文章

  1. Bagging与随机森林算法原理小结
  2. CVPR单目深度估计竞赛结果出炉,腾讯光影研究室优势夺冠,成果落地应用
  3. SAP SD 微观研究之如何得到Customer List?
  4. 第一篇博客文章,hello world及编码
  5. 在网上看到一个故事,我觉得挺感人
  6. 【二分】最大均值(ybtoj 二分-1-3)
  7. hue安装使用,集成数据库
  8. 《Excel与VBA程序设计》第四章新鲜出炉
  9. idea java常用手册
  10. 模糊pid算法实现(Java)
  11. 我们要不要上线「个人app」 ?
  12. “fatal error C1083 ”无法打开包括文件
  13. 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
  14. 怎么把kux格式转换成mp4?完美转换优酷kux格式
  15. 学习AngularJs:Directive指令用法
  16. 12306泄露数据可视化分析
  17. ACL Tutorial|开放域问答综述 -- 陈丹琦和Scott
  18. php 图片处理羽化,ps中羽化是什么意思
  19. 吉林大学应用数学(学硕)专业考研上岸经验分享
  20. 设置按峰值带宽计费_邻道功率比(ACPR)和占用带宽(OBW)

热门文章

  1. Spring Boot 项目优化和Jvm调优 (楼主亲测,真实有效)
  2. 《Linux就该这么学》修正已知全部勘误,免费下载啦!
  3. 解决ubuntu12.04下安装gitlabError Compiling CSS asset的错误以及401资源错误
  4. Python变量和字符串详解
  5. JQuery Ajax调用asp.net后台方法
  6. 供参考的 php 学习路线
  7. 微信小程序 页面递归生成
  8. 201809-1 卖菜
  9. 洛谷3067 BZOJ 2679题解(折半搜索)
  10. django.db.utils.OperationalError: (1049, Unknown database 'djangodb')