HIbernate Session 线程安全的问题
- 博客园
- 首页
- 新随笔
- 联系
- 管理
- 订阅
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是隔离多个线程的数据共享,不存在多个线程之间共享资源,因此不再需要对线程同步。
转载于:https://www.cnblogs.com/hualishu/p/7575699.html
HIbernate Session 线程安全的问题相关推荐
- Hibernate Session的delete()方法
本文介绍Hibernate Session的delete()方法.delete()方法用于从数据库中删除与Java对象对应的记录.对应游离对象和持久化对象,delete语句会做出不同的反应. dele ...
- Could not open Hibernate Session for transaction;
javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...
- Spring下没有配置事务导致hibernate session报错
2019独角兽企业重金招聘Python工程师标准>>> org.hibernate.HibernateException: No Hibernate Session bound to ...
- Hibernate Session get()vs load()的区别
Hibernate Session get()vs load()的区别 Hibernate Session提供了从数据库中获取数据的不同方法.其中两个是 - get()和load().我们还可以在不同 ...
- Hibernate Session merge,update,save,saveOrUpdate,persist
Hibernate Session merge,update,save,saveOrUpdate,persist Hibernate Session是java应用程序和hibernate框架之间的接口 ...
- Hibernate Session get()vs load()实例差异
Hibernate Session provide different methods to fetch data from database. Two of them are – get() and ...
- Hibernate Session合并,更新,保存,saveOrUpdate,持久化示例
Hibernate Session is the interface between java application and hibernate framework. Today we will l ...
- Could not open Hibernate Session for transaction, 数据库连接超时解决方法
异常: javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException ...
- 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 ...
- Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Gener
今天整合ssh 项目遇到的错误: ERROR SqlExceptionHelper Cannot create PoolableConnectionFactory (Access denied for ...
最新文章
- Bagging与随机森林算法原理小结
- CVPR单目深度估计竞赛结果出炉,腾讯光影研究室优势夺冠,成果落地应用
- SAP SD 微观研究之如何得到Customer List?
- 第一篇博客文章,hello world及编码
- 在网上看到一个故事,我觉得挺感人
- 【二分】最大均值(ybtoj 二分-1-3)
- hue安装使用,集成数据库
- 《Excel与VBA程序设计》第四章新鲜出炉
- idea java常用手册
- 模糊pid算法实现(Java)
- 我们要不要上线「个人app」 ?
- “fatal error C1083 ”无法打开包括文件
- 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
- 怎么把kux格式转换成mp4?完美转换优酷kux格式
- 学习AngularJs:Directive指令用法
- 12306泄露数据可视化分析
- ACL Tutorial|开放域问答综述 -- 陈丹琦和Scott
- php 图片处理羽化,ps中羽化是什么意思
- 吉林大学应用数学(学硕)专业考研上岸经验分享
- 设置按峰值带宽计费_邻道功率比(ACPR)和占用带宽(OBW)
热门文章
- Spring Boot 项目优化和Jvm调优 (楼主亲测,真实有效)
- 《Linux就该这么学》修正已知全部勘误,免费下载啦!
- 解决ubuntu12.04下安装gitlabError Compiling CSS asset的错误以及401资源错误
- Python变量和字符串详解
- JQuery Ajax调用asp.net后台方法
- 供参考的 php 学习路线
- 微信小程序 页面递归生成
- 201809-1 卖菜
- 洛谷3067 BZOJ 2679题解(折半搜索)
- django.db.utils.OperationalError: (1049, Unknown database 'djangodb')