我们必须关闭会话对象吗?

Do we have to close the session object?

我们是否必须在使用后关闭会话?据我了解,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 方法。这是否意味着我每次都必须关闭会话?

在您的代码中使用此通用公式关闭连接

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

查看更多here

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

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