为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate openSession()vs getCurrentSession()

Hibernate openSession()vs getCurrentSession()

沧海一幻觉 2019-08-15 15:49:08
Hibernate openSession()vs getCurrentSession()我有一些关于在JSP Web应用程序中使用Hibernate的问题。应该是什么价值hibernate.current_session_context_class?那么,应该使用以下哪个陈述?为什么? Session s = HibernateUtil.getSessionFactory().openSession();  Session s = HibernateUtil.getSessionFactory().getCurrentSession()最后,哪一个更好“每个网络应用一个会话”或“每个请求一个会话”?
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果我们谈论SessionFactory.openSession()

  • 它总是创建一个新的Session对象。

  • 您需要显式刷新和关闭会话对象。

  • 在单线程环境中,它比getCurrentSession()慢。

  • 您无需配置任何属性即可调用此方法。

如果我们谈论SessionFactory.getCurrentSession()

  • 如果不存在,它会创建一个新的Session,否则使用当前hibernate上下文中的相同会话。

  • 您不需要刷新和关闭会话对象,Hibernate会在内部自动处理它。

  • 在单线程环境中,它比openSession()更快。

  • 您需要配置其他属性。“hibernate.current_session_context_class”调用getCurrentSession()方法,否则会抛出异常。


查看完整回答
反对 回复 2019-08-15
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

openSession:当你打电话时SessionFactory.openSession,它总是创建一个新Session对象并交给你。

您需要显式刷新和关闭这些会话对象。

由于会话对象不是线程安全的,因此您需要在多线程环境中为每个请求创建一个会话对象,并在Web应用程序中为每个请求创建一个会话。

getCurrentSession:当你调用时SessionFactory.getCurrentSession,它将为你提供处于休眠上下文并由内部hibernate管理的会话对象。它与事务范围有关。

当你调用时SessionFactory.getCurrentSession,它会创建一个新的,Session如果它不存在,否则使用当前hibernate上下文中的相同会话。它会在事务结束时自动刷新和关闭会话,因此您无需在外部执行此操作。

如果您在单线程环境中使用hibernate,则可以使用getCurrentSession,因为与每次创建新会话相比,它的性能更快。

您需要将以下属性添加到hibernate.cfg.xml以使用getCurrentSession方法:

<session-factory>
    <!--  Put other elements here -->
    <property name="hibernate.current_session_context_class">
          thread    </property></session-factory>


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 516 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信