session.getCurrentSession的用法:(说白了就是相当与在service层开事务,dao层不能自己开事务一个道理)
1、在hibernate的配置文件中:
<property name="current_session_context_class">thread</property>
2、不需要写session.close方法,在事务提交的时候会自动关闭(由hibernate内部完成)
3、crud都需要事务
1、因为是一个线程,所以整个方法中只有一个session,所以也只有一个事务
2、保证了整个业务操作的安全性
在使用getCurrentSession()的常见错误:
1.
表示没在hibernate.cfg.xml配置文件中配置
<!-- 告诉hibernate session由当前线程产生 -->
<property name="current_session_context_class">thread</property>
2.
表示没有开启事务,如果要使用getCurrentSession(),则必须要开启事务,session需要和事务绑定在一起
3.
表示session已经自动关闭了,我们又手动进行了session关闭操作
注意:利用当前线程获取session,在事务提交的时候,session就自动关闭了。不需要我们手动关闭。