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

两种Session方式 openSession和getCurrentSession

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

两种Session方式 openSession和getCurrentSession

在同一个线程中使用getCurrentSession

两种Session方式 openSession和getCurrentSession

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

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

在不同线程里比较:

两种Session方式 openSession和getCurrentSession


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

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

两种Session方式 openSession和getCurrentSession

 

 

 

 

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

相关文章:

  • 2022-12-23
  • 2021-10-25
  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
猜你喜欢
  • 2022-12-23
  • 2021-07-05
  • 2022-12-23
  • 2021-05-16
  • 2022-02-26
  • 2021-06-17
  • 2021-10-10
相关资源
相似解决方案