openSession和getCurrentSession的区别 thred jta

本文详细解析了Hibernate框架中openSession()和getCurrentSession()方法的区别。重点介绍了这两种方法在事务管理和session创建方面的不同之处,以及它们在不同上下文中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在调用openSession()方法时,总是新建session,而getCurrentSession()方法,则是从上下文中找session,如果上下文中有session,那么就不需要新建,如果上下文中没有找到session,则新建session。

    2.getCurrentSession()可以用于界定事务边界,调用getCurrentSession()方法时,事务提交的时候,自动关闭session,而openSession()方法需要手动调用session.close()方法关闭session。

    3.getCurrenSession()查找session时的上下文,可以分为两种,一种为thread,一种为jta(需要在hibernate.cfg.xml文件中手动配置)。

        当上下文设置为thread时,getCurrentSession()查找session时到数据库的线程中去查找,直接使用数据库的Connection连接来管理事务。

        上下文设置为jta时,多半是项目的数据需要存储到不同的数据库,需要transaction manager来专门管理事务,这个transaction manager一般有application server来提供。这种事务,称为分布式事务。

    4.注意:openSession()方式和getCurrentSession()方式不能混用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值