Java 如何在春季管理hibernate会话

Java 如何在春季管理hibernate会话,java,spring,hibernate,tomcat,hibernate-session,Java,Spring,Hibernate,Tomcat,Hibernate Session,我对会话关闭有问题,在运行此应用程序时会产生什么影响,以及在生产中会发生什么情况 我在我的生产服务器中解决了两个问题:在应用程序使用期间,大约800MB的内存会被消耗掉 一段时间后,它会出现outofmemory错误和服务器崩溃 我正在使用tomcat服务器部署我的应用程序 我的密码是 @Transactional public Collection list(String queryString, Object[] value) throws Exception { Session ses

我对会话关闭有问题,在运行此应用程序时会产生什么影响,以及在生产中会发生什么情况

我在我的生产服务器中解决了两个问题:在应用程序使用期间,大约800MB的内存会被消耗掉

一段时间后,它会出现outofmemory错误和服务器崩溃

我正在使用tomcat服务器部署我的应用程序

我的密码是

@Transactional
public Collection list(String queryString, Object[] value) throws Exception {
  Session session = this.sessionFactory.getCurrentSession();
  Query query = session.createQuery(queryString);
  return query.list();
}

@Transactional
public Collection list(String queryString, Object[] value) throws Exception {
  Session session = this.sessionFactory.openSession();
  Query query = session.createQuery(queryString);
  return query.list();
}
如果我确实关闭了会话,那么延迟初始化将为会话已关闭提供一个错误

请帮我解决这个问题。 如何使用spring配置在hibernate中处理开放会话
我正在使用hibernate 3.6.1和spring 3.0.6。

向服务器添加VM参数,以避免outofmemory错误

-Xms256m -Xmx1024m -XX:+DisableExplicitGC -Dcom.sun.management.jmxremote
-XX:PermSize=256m -XX:MaxPermSize=512m

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

编写上述方法以严格处理事务,而不必担心会话对象

您使用的是哪种应用程序?我认为您不需要在使用@Transactional后打开会话,这取决于具体情况。如果要在方法调用后访问延迟加载的引用,则需要打开会话,否则该会话将在事务完成后立即关闭。然而,实际的事务边界应该是服务,而不是dao层。是的,我同意你的看法。Deinum,对于延迟加载,我们也可以使用OpenSessionInView过滤器。但是为什么加载应用程序需要太多内存呢