【问题标题】:(Hibernate) Difference between Session.close() and releaseSession(Session)(Hibernate) Session.close() 和 releaseSession(Session) 的区别
【发布时间】:2013-07-29 15:00:42
【问题描述】:

我在这个项目中使用 Hibernate 和 Spring MVC。

我有这段代码:

...

int count = (Integer) this.getSession().createSQLQuery(sql).list().get(0);

this.getSession().close();

return count;

我应该使用this.getSession.close(),还是应该使用releaseSession(this.getSession())??

我很难理解这两种方法之间的区别..

谢谢!

【问题讨论】:

  • 这个神奇的releaseSession方法从何而来?
  • 那么这就是你的答案:关闭通过这个 DAO 的 SessionFactory 创建的给定 Hibernate Session,如果它没有绑定到线程(即不是一个事务性会话)。(添加了重点)。 close 方法将总是关闭sessionreleaseSession 方法只会在需要时关闭 session。如果你关闭一个线程绑定会话,那么你的应用程序的其他地方就会出现问题,因为 Spring 不希望它被关闭。
  • @BoristheSpider 感谢您的回答,现在.. 可以使用 releaseSession(this.getSession()) ??

标签: java hibernate session spring-mvc


【解决方案1】:

HibernateDaoSupport 是 Spring 框架提供的一种支持,当调用 releaseSession() 时,它只会终止休眠会话,而不是事务。但是,当您执行休眠的 session.close() 时,它也会终止事务。我认为您不需要自己处理这些交易。让弹簧来处理它们。 @Transactional 将处理它们。只需在需要的地方定义即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2013-05-16
    • 2011-05-26
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2013-02-06
    相关资源
    最近更新 更多