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

时间:2015-01-21 08:11:02

标签: java spring hibernate session

我们必须在使用后关闭会话吗?据我所知,如果需要,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方法。这是否意味着我每次都必须关闭会话?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

查看更多here