【问题标题】:Difference between getSession() and getNewSession()getSession() 和 getNewSession() 的区别
【发布时间】:2011-05-29 12:04:04
【问题描述】:

Hibernate 使用 Spring 的 SessionFactoryUtils,getSession() 和 getNewSession() 的实际区别是什么?

我一直在 DAO 方法中使用 getSession(),但是当它开始经常被调用时,开始出现一堆“会话已关闭”异常。我将其更改为 getNewSession(...),现在好像这些问题已经消失了...但是,我仍然需要知道。

请解释一下。

【问题讨论】:

  • 不是每次调用都会打开一个新的连接吗?

标签: java hibernate spring orm transactions


【解决方案1】:

getSession() 将尝试查找绑定到当前线程的预先存在的会话,并在必要时创建一个。 getNewSession() 将始终创建会话。 Javadocs 在这里:http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/SessionFactoryUtils.html

如果您觉得您经常收到会话已关闭错误,请尝试查找您的会话被释放的位置。

【讨论】:

  • 好的,明白了 - getSession(...) 是 getNewSession(...) 的一个更优化的变体。现在 session.close 异常消失了,但我在 com.mysql.jdbc.PreparedStatement.fillSendPacket 有 java.lang.NullPointerException。有什么线索吗?
  • @xantrus - 作为一个不同的问题提出,并提供堆栈跟踪。
猜你喜欢
  • 2021-11-12
  • 2014-07-15
  • 1970-01-01
  • 2018-01-23
  • 2013-08-07
  • 2011-10-20
  • 2020-01-23
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多