hibernate session 什么时候关闭
1个回答
展开全部
你好,getCurrentSession得到的session是和事务绑定的session,所以:
1,要用getCurrentSession生产的session,就必须有事务环境,意思就是你必须在调用session方法之前,session.beginTransaction();就算你只是get或者query
2,在事务提交之后,即session.getTransaction().commit()之后,session自动关闭,所以你用getCurrentSession,只需要commit事务,不要去调用session.close()
3,你用的是ssh,spring为
hibernate
的current_session_context_class配置了一个SpringSessionContext来帮你管理getCurrentSession中的session,所以,你在OpenSessionInview的时候,spring就自动的帮你打开了session——>你在执行用AOP包装的事务的时候,事务就开启了——>执行你的业务方法——>提交事务(注意,hibernate管理的getCurrentSession在提交事务的时候才会关闭session,而spring提供的这个SpringSessionContext不会)——>opensessioninview关闭session。
从上面的执行流程可以看出,你在SSH集成的时候,如果用的是getCurrentSession的集成方式,就不能设置hibernate的current_session_context_class为thread,而应该空着,让spring帮你。
1,要用getCurrentSession生产的session,就必须有事务环境,意思就是你必须在调用session方法之前,session.beginTransaction();就算你只是get或者query
2,在事务提交之后,即session.getTransaction().commit()之后,session自动关闭,所以你用getCurrentSession,只需要commit事务,不要去调用session.close()
3,你用的是ssh,spring为
hibernate
的current_session_context_class配置了一个SpringSessionContext来帮你管理getCurrentSession中的session,所以,你在OpenSessionInview的时候,spring就自动的帮你打开了session——>你在执行用AOP包装的事务的时候,事务就开启了——>执行你的业务方法——>提交事务(注意,hibernate管理的getCurrentSession在提交事务的时候才会关闭session,而spring提供的这个SpringSessionContext不会)——>opensessioninview关闭session。
从上面的执行流程可以看出,你在SSH集成的时候,如果用的是getCurrentSession的集成方式,就不能设置hibernate的current_session_context_class为thread,而应该空着,让spring帮你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询