在getCurrentSession()上使用openSession() - 何时以及为何?

时间:2010-10-31 00:49:35

标签: java hibernate jpa

这个问题与我提出的另一个question有关,但是为什么你会使用openSession()而不是getCurrentSession()的原因是什么?我知道你会使用openSession(),这样你就可以自行管理会话的结束和刷新,但是,你为什么要手动完成这个呢?

我想在当前会话中单独执行事务时使用了openSession(),虽然我不确定这是否正确使用了openSession()。

为什么要打开多个会话?

2 个答案:

答案 0 :(得分:4)

  

我知道你会使用openSession(),这样你就可以自行管理会话的结束和刷新,但是,你为什么要手动完成这个呢?

可以使用openSession()来实现long conversations(即,当您想要使用单个会话来多个数据库事务,也就是扩展时会话模式)。

  

我想在当前会话中单独执行事务时使用了openSession(),虽然我不确定这是否正确使用了openSession()。

嗯......什么?交易和会话是不同的概念。你到底是什么意思?

  

为什么要打开多个会话?

这不是意图。

参考

答案 1 :(得分:0)

我们知道有两种方法可以从SessionFactory类创建/获取会话。 1)使用opensSession()方法和getCurrentSession()方法。

这些是以下差异,

openSession():-

  • 它将创建新的Session对象。

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

  • 在单线程环境中,它比getCurrentSession方法要慢。
  • 无需配置任何属性即可调用此方法。

getCurrentSession():-

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

  • 无需刷新和关闭会话对象,Hibernate会自动在内部对其进行处理。

  • 在单线程环境中,它比getOpenSession()方法快。
  • 需要配置其他属性“ hibernate.current_session_context_class”以调用getCurrentSession()方法,否则它将引发异常。