两种Session方式 openSession和getCurrentSession

Hibernate有两种方式获得session,分别是: 
openSession和getCurrentSession 
他们的区别在于 
1. 获取的是否是同一个session对象 
openSession每次都会得到一个新的Session对象 
getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象 

因为是不同的session,所以肯定会返回false

在同一个线程中使用getCurrentSession

考虑一下为什么equals就返回false了?

getCurrentSession第一次得到的是一把钥匙(放在堆里),指向一个session(放在栈里);第二次得到的是第一把钥匙的复制品(放在堆里),这两把钥匙并不是同一把,equals比较的就是这两把钥匙到底是否相同,结果为false;而这两把钥匙都指向同一个session,==比较的是这两把钥匙指向的session是否相同,结果为true

在不同线程里比较:


2. 事务提交的必要性 
openSession只有在增加,删除,修改的时候需要事务,查询时不需要的 
getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭 

  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete 语句

因为getCurrentSession()本意就是获取当前事务中的session,如果没有事务,你从哪里获取session

猜你喜欢

转载自blog.csdn.net/QingXu1234/article/details/82015420
今日推荐