这是一种Q& A风格。
使用SessionFactoryUtils.getSession获取会话并进行查询时,可以仅调用有限计数,并在该限制计数后等待调用。 为什么会这样?
try {
SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
Query query = session.getNamedQuery("updateAField");
query.setParameterList("states", states);
int updatedCount = query.executeUpdate();
return updatedCount;
} catch (Exception e) {
logger.error(e.toString());
throw new Throwable(e);
}
答案 0 :(得分:3)
因为您正在从Hibernate获取会话但是您没有发布它。 所以通过调用SessionFactoryUtils.closeSession(session);你必须在你的功能结束时释放使用过的会话。 调用此函数的限制计数是数据库连接池大小。 它将是:
SessionFactory sessionFactory = null;
Session session = null;
try {
sessionFactory = getHibernateTemplate().getSessionFactory();
session = SessionFactoryUtils.getSession(sessionFactory, true);
Query query = session.getNamedQuery("updateAField");
query.setParameterList("states", states);
int updatedCount = query.executeUpdate();
return updatedCount;
} catch (Exception e) {
logger.error(e.toString());
throw new Throwable(e);
} finally {
if (session != null) {
SessionFactoryUtils.closeSession(session);
}
}