【问题标题】:Do we have to close the session object?我们必须关闭会话对象吗?
【发布时间】:2019-04-25 17:41:11
【问题描述】:

我们是否必须在使用后关闭会话?据我了解,SessionFactory 会在需要时关闭会话。例如:

    @Autowired
    private SessionFactory sessionFactory;

    public long count(String extId) {
            Session session = this.sessionFactory.getCurrentSession();
            BigDecimal count = (BigDecimal) session
                    .createSQLQuery(
                            "SELECT COUNT(*) FROM smsc.queue WHERE extId=:extId AND nextId IS NULL")
                    .setString("extId", extId).uniqueResult();
            return count.longValue();
        }

这是在我的服务中调用的 DAO 方法。这是否意味着我每次都必须关闭会话?

【问题讨论】:

  • 是的……让它成为一种习惯!

标签: java spring hibernate session


【解决方案1】:

是的。完成后,您应该关闭它。你不需要自己明确地关闭它,有框架可以为你做到这一点。 打开和关闭会话并不是一项昂贵的操作。由于缓存的会话数据随着时间的推移变得越来越陈旧,因此将它们保持打开太久通常是有问题的。 会话在第一次调用 getCurrentSession() 时打开,并在事务结束时关闭。它还会在事务提交之前自动刷新。

https://developer.jboss.org/wiki/OpenSessionInView

【讨论】:

    【解决方案2】:

    使用这个通用公式关闭代码中的连接

    try {
        connection = dataSource.getConnection();
        // Do stuff with connection.
    } finally {
        connection.close();
    }
    

    查看更多here

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多