我们必须关闭会话对象吗?
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() 时打开,在事务结束时关闭。它也会在事务提交之前自动刷新。
我们是否必须在使用后关闭会话?据我了解,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() 时打开,在事务结束时关闭。它也会在事务提交之前自动刷新。