问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...ssh一直找不到session,报错not found session in current thread

发布网友 发布时间:2024-09-08 19:26

我来回答

1个回答

热心网友 时间:2024-11-18 12:35

Hibernate4 与 spring3 集成之后, 如果在取得session 的地方使用了getCurrentSession, 可能会报一个错:“No Session found for current thread”, 这个错误的原因,网上有很多解决办法, 但具体原因的分析,却没有多少, 这里一个原理分析:

SessionFactory的getCurrentSession并不能保证在没有当前Session的情况下会自动创建一个新的,这取决于CurrentSessionContext的实现,SessionFactory将调用CurrentSessionContext的currentSession()方法来获得Session。在Spring中,如果我们在没有配置TransactionManager并且没有事先调用SessionFactory.openSession()的情况直接调用getCurrentSession(),那么程序将抛出“No Session found for current thread”异常。如果配置了TranactionManager并且通过@Transactional或者声明的方式配置的事务边界,那么Spring会在开始事务之前通过AOP的方式为当前线程创建Session,此时调用getCurrentSession()将得到正确结果。

然而,产生以上异常的原因在于Spring提供了自己的CurrentSessionContext实现,如果我们不打算使用Spring,而是自己直接从hibernate.cfg.xml创建SessionFactory,并且为在hibernate.cfg.xml
中设置current_session_context_class为thread,也即使用了ThreadLocalSessionContext,那么我们在调用getCurrentSession()时,如果当前线程没有Session存在,则会创建一个绑定到当前线程。

Hibernate在默认情况下会使用JTASessionContext,Spring提供了自己SpringSessionContext,因此我们不用配置current_session_context_class,当Hibernate与Spring集成时,将使用该SessionContext,故此时调用getCurrentSession()的效果完全依赖于SpringSessionContext的实现。

在没有Spring的情况下使用Hibernate,如果没有在hibernate.cfg.xml中配置current_session_context_class,有没有JTA的话,那么程序将抛出"No CurrentSessionContext configured!"异常。此时的解决办法是在hibernate.cfg.xml中将current_session_context_class配置成thread。

在Spring中使用Hibernate,如果我们配置了TransactionManager,那么我们就不应该调用SessionFactory的openSession()来获得Sessioin,因为这样获得的Session并没有被事务管理。

至于解决的办法,可以采用如下方式:
1.  在spring 配置文件中加入

<tx:annotation-driven transaction-manager="transactionManager"/>

并且在处理业务逻辑的类上采用注解

@Service
public class CustomerServiceImpl implements CustomerService {  
    @Transactional
    public void saveCustomer(Customer customer) {
        customerDaoImpl.saveCustomer(customer);
    }
    ...
}

另外在 hibernate 的配置文件中,也可以增加这样的配置来避免这个错误:

<property name="current_session_context_class">thread</property>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
《火星异种》揭示了怎样的人性丑恶。? 日本哪些漫画动作(战斗类)设计较好,较为细致?并请稍微分析 新的一学年马上开学了,想送老师一件开学礼物,实用性强的。 开学送老师什么礼物? 未办理不动产的 没办登记的抵押合同怎么办 欠债人失联后的处理办法 早上肚子胀是什么原因 梦见姐姐去外地工作 电脑中所存的文件都在哪儿 你认为该教师上课优缺点各是什么? 一天拉好几次大便正常吗 国内有哪些沙漠徒步的好去处? 我租了一商铺商住两用,可隔壁一KTV每天营业从下午到第二天天亮,我应该... 乌鲁木齐沙漠旅游景点_新疆的沙漠旅游景点哪个最好 ...资产处置收益为啥不减少之前未实现内部交易损益已经计提? ...歌很喜欢但不知歌名是甚么只知道歌词的第一句是我是可爱小攻我怕谁... 如果未实现内部交易损益 实现了,合并报表上还需要调整吗?该怎么调整... 徒步戈壁哪些地方 内部交易损益是什么 什么是内部损益 特别走心的干净短句,简单干净的暖心句子 人善良,不一定是好事,只想做自己是啥意思? 贝多芬 和莫扎特 谁才是真正的不朽? 简短走心的句子 令人深刻的励志文案 说一说为什么不能焚烧垃圾,禁止企业乱排废气废水? 最走心的句子 怎么写出自己的感受 《喷射战士2》全按键操作方法介绍_《喷射战士2》全按键操作方法是什么... 《喷射战士2》新手指南介绍_《喷射战士2》新手指南是什么 我和学长在学校角落约会 后来才知道他是个花心渣男 韶音年入60亿,发布全新开放式耳机OpenFit,骨传导神话能否继续? 冷山2和冷山2air到底是买哪个好呢?纠结啊冷山2春季和秋季用可以吗?_百 ... 公安机关如何处理捡到手机不还的情况 捡到一部手机,怎样处理? ?工作人员捡到手机不还怎么办 如何评价B站的up主们? WiFi连接成功,但看不了视频,是怎么回事? 为什么我的手机连上wifi却看不了视频? 为什么我用WiFi看不了视频? 2024广东六一儿童节去哪玩 广东珠江电影院线六一儿童片专场在哪些影院? 番禺哪里有适合小孩子去游玩的地方?请知道多少说多少,沙湾古镇亲子旅游... 六一去方特人多吗 雌激素过高,医生给开的黄体酮胶囊,能服用吗 茑萝的芽长什么样子的? 黄体酮是雌激素吗? 子宫内膜厚吃黄体酮能脱落干净吗 黄体酮是雌激素吗 茑萝发芽时叶子为什么是红色的 准妈妈发烧可以用药吗?