getSession()和getCurrentSession()的区别及常见问题

Hibernate系列教材 (二十一)- 各类概念 - OpenSession与GetCurrentSession的区别 getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象。getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭。的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。openSession只有在增加,删除,修改的时候需要事务,查询时不需要的。如果是同一个线程(本例是在主线程里),每次获取的都是相同的Session。 阅读详情

 

1. 采用getCurrentSession()创建的session会绑定到当前线程中(第一次调用时会创建一个Session实例,如果该Session未关闭,后续多次获取的是同一个Session实例),而采用openSession()创建的session则不会(每次打开都是新的Session,所以多次获取的Session实例是不同的)。

 

2.采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭

 

3.使用getCurrentSession时,需要在配置文件中添加如下:

(1)如果使用的是本地事务(JDBC事务)

 

<property name="current_session_context_class">thread</property> 

 

(2)如果使用的是全局事务(JTA事务)(hibernate3.0里只能和jta绑定)

 

<property name="current_session_context_class">jta</property> 

 

 

 

4.常见问题:

spring管理事务的话,如果要保证当前线程内只有一个session,需要将sessionFactory传递给org.springframework.orm.hibernate3.HibernateTransactionManager,spring负责事务的开始,提交,回滚以及session的关闭,假设spring用于管理事务的session是(session1)。如果我还用HibernateUtils.getCurrentSession()方法获得session的话,得到的session却是(session2),和开始事务的session不是同一个对象,就造成session2的事务没有提交,对数据库的操作无效。

总结

4.1如果想让spring帮你管理事务,只能在spring中配置SessionFactory。如果使用hibernate原有的sessionFactory,则只能自己手动管理事务。

4.2如果想使用sessionFactory.getCurrentSession()方法,必须配置sessionFactory和jta或thread绑定。但是hibernate3.0不支持与thread绑定,3.1以上才支持。

4.3sessionFactory.getCurrentSession()方法取得的session,在做数据库操作时必须在事务中做,包括只读的查询,否则会报错。

getCurrentSession 与 openSession() 的区别 NULL 博文链接:https://bbxyhaihua.iteye.com/blog/505085 立即下载

相关推荐

SessionFactory.getCurrentSession与openSession的区别

博文链接:https://shaqiang32.iteye.com/blog/201918

hibernate 之 getCurrentSession() 详解

在Spring @Transactional声明式事务管理的配置中,hibernate.current_session_context_class=thread 这一句是不能加的,加了就会出错,那为什么不能加呢? 那是因为在Spring事务管理中,current Session是绑定到SpringSessionContext中的,而不是ThreadLocalSessionContext中的。

Skyline 2935

新Hibernate SessionFactory().getCurrentSession()猫腻

NULL 博文链接:https://zgdkik.iteye.com/blog/1835667

Hibernate中openSession()和getCurrentSession()方法的区别

首先它们都是通过SessionFactory构建Session对象的。 一、区别: 1. openSession 从字面上可以看得出来,是打开一个新的session对象,而且每次使用都是打开一个新的session,假如连续使用多次,则获得的session不是同一个对象,并且使用完需要调用close方法关闭session。 2. getCurrentSession ,从字面上可以看得出来,是获...

“花花”公子_龙的博客 3927

DFT知识点扫盲——DFT scan chain

实际在项目中synccell一般直接上ULVT,既然是SDF,就是带Scan接口的DFF,SN (set negtive)是低置位,RP(reset positive)是高复位,既没有SN也没有RP的就是无复位寄存器。1:定义:满足可测试性设计(DFT),将设计中所有的触发器连接到一条或者若干条链上,称为scan chain,将一个复杂的时序电路转换为简单的组合电路进行测试,这一步是在逻辑综合(DC)中实现。当SE=1当SI=1时,电路进入scan状态,当SI=0时,电路工作在normal状态。

笨蛋大乌龟的博客 4933

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

weixin_61900468的博客 1万+

getCurrentSession与openSession的区别

getCurrentSession与openSession的区别 一:getCurrentSession () 使用当前的 session 注意:1,使用 SessionFactory.getCurrentSession() 需要在 hibernate.cfg.xml 中如下配置: 如果采用 jdbc 独立引用程序配置如下: thread 如果采用了 JTA 事务配置如下 jta 2,使用的是 getCurrentSession 来创建 session 的话,在 commit 后,session 就自动被

weixin_46161383的博客 208

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 339

在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

则提供了更为灵活的手动管理方式,适用于需要更多控制权的场景。在实际应用中,应根据具体需求和场景来选择合适的方法。生命周期管理,适用于与 Spring 等框架集成的场景。提供了更为自动化和集成化的事务管理和。对象,它们之间存在一些关键的区别。在 Hibernate 中,是两种不同的方法来获取。

蜗牛Clear的博客 693

别再只会复制Haar级联代码了!OpenCV人脸检测全方案深度解析,从原理到工业级落地

通用预训练模型在你的业务场景效果不好时,用自己的业务数据集训练专属的级联器,是提升精度的终极方案,OpenCV自带和工具,支持自定义Haar/LBP级联器训练。场景首选方案次选方案新手入门学习Haar级联分类器LBP级联分类器嵌入式轻量固定场景LBP级联分类器YuNet轻量版工业级落地项目(99%场景)DNN+YuNetMTCNN多人脸+小目标复杂场景DNN+YuNet自定义微调模型同时做人脸+其他目标检测。

2601_94871597的博客 379

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 184

Hibernate中的openSession(),getSession() 和 getCurrentSession() 的区别

开发中,使用MyEclipse自动生成的Hibernate DAO类中在对session的获取中,都使用的getSession(MyEclipse8.5之前的版本都是如此)。 首先要说明一下这3个方法: 1、openSession 和 getCurrentSession这两个方法是 Hibernate中的sessionFactory中的方法。要获取session只能通过这两个方法获取。 2、

jpbirdy的专栏 3875

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2185

使用Spring的HibernateDaoSupport时的getSession()3个方法的区别

在继承了HibernateDaoSupport的Dao中,  this.getsession实际上是调用了父类HibernateDaoSupport中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session。这样做有可能有问题,尽管这种方式拿到的Session会自动关闭,但是他是有一定的失效策

技术改变生活,生活改变思想,思想改变技术。 1万+

MCP+A2A:从实验室到生产环境的落地之旅

本文通过实际项目中的落地案例,展示了 MCP+A2A 协议结合使用的强大功能和广泛适用性。同时,我们也探讨了开发者社区的贡献、与其他技术的融合,以及未来技术趋势的展望。希望本文能够帮助读者更好地理解如何将这一架构从实验室推向生产环境,推动 AI 技术的实际应用。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1493

上午题目复习ing

无线局域网,11b是常用的,2.4ghz,后来改进5ghz,有些字段可以工作在5g的字段802.11/11a/1h/11n,,,,,11b和11g还在2.4ghz工作。数据链路层 传输服务,数据链路维护,差错控制,arp ip到mac,rarp反过来,token ring,x.25,atm,ethernet,蓝牙10m,简化因特网,分散式网,快调频,短包,点对点,点多多点,2.4ghz,最高速率1mb/s。gsm:是时分多址,900m-1800m,微蜂窝是市区,微微风是室内,伞是盲点,

weixin_47120900的博客 893

【转】Spring与Hibernate集成中的session问题(getSession()、getCurrentSession()与openSession() )

主要讨论Spring与Hibernate集成中的session问题 1.通过getSession()方法获得session进行操作 Java代码   public class Test  extends HibernateDaoSupport{       public void save(User user){          this.getSession().sa

Ggfest的专栏 1321

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hibernate的getSession和getCurrentSession源码解析

Hibernate openSession 测试代码: 1)sf.openSession()时,sessionFactory会new一个新的Session,从配置中读取是否要自动关闭Session,而配置中默认isAutoCloseSessionEnabled为false。 2)session.getTransaction().commit(),提交事务 3)提交完成或回

add1235684adfgff9875的专栏 1291

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hibernate openSession() 和 getCurrentSession的区别

Hibernate openSession() 和 getCurrentSession的区别getHiberanteTemplate 、getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。 采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭。 采用getCurrentSessi

叶落枫亭 8239

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

getCurrentSession与getSession之关系

采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭2、使用getCurrentSession()需要在hibernate.cfg.xml文

chao331303的专栏 705

Hibernate getCurrentSession()和openSession()的区别

getCurrentSession()和openSession()的区别

Luvjuin的博客 485

使用Spring的HibernateDaoSupport时的getSession()方法相关问题

在继承了HibernateDaoSupport的Dao中,  this.getsession实际上是调用了父类HibernateDaoSupport中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session。这样做有可能有问题,尽管这种方式拿到的Session会自动关闭,但是他是有一定的失效策略的

Seven's Rainbow Paradise 4317

this.getsession和this.getHibernateTemplate().getSessionFactory().getCurrentSession()/OpenSession区别 .

这个是hibernate与spring整合开发,让DAO继承了spring的HibernateDaoSupport,这样的确能够提高开发效率 ,但是不够灵活,而且使DAO层依赖于spring的api,增加了耦合。但是不考虑复用的话还可以。     下面一个一个的分析: this.getsession实际上是调用了父类中的方法获得session。使用spring管理hibernate的Sessio

蓝色的天空 1204
上一篇: ModelDriven的原理
下一篇: 同是流行MVC框架,比较Strtus2和SpringMVC的区别
满地节操1
博客等级 码龄10年 12粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值