getSession() 和 getNewSession() 的区别

Posted

技术标签:

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

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

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

请解释一下。

【问题讨论】:

不是每次调用都会打开一个新的连接吗? 【参考方案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 - 作为一个不同的问题提出,并提供堆栈跟踪。

以上是关于getSession() 和 getNewSession() 的区别的主要内容,如果未能解决你的问题,请参考以下文章

request.getSession(true)和request.getSession(false)的区别

转:request.getSession(true)和request.getSession(false)的区别

Struts2 和 Hibernate - 在 Servlet 外部访问 ActionContext.getContext().getSession()

request.getSession().invalidate() 能否释放内存?

Jsp和sessionrequest.getSession()

使用 HTTPS 的 getServerSideProps 中的 nextjs 和 next-auth getSession() 不起作用