Hibernate查询postgres

时间:2013-02-06 20:02:13

标签: java hibernate jsp tomcat

我的VPS主机上有jsp webapp,tomcat 7作为服务器。我正在使用Hibernate 3和PostgreSQL。我的类DBManager中的所有方法(负责数据库服务,连接,查询)使用几乎相同的结构:

 Session session = sessionFactory.openSession();
    session.beginTransaction();
    =======
    HERE HQL QUERY/session.get/update/save etc are executed
    =======
    session.getTransaction().commit();
    session.close();

问题是我的VPS一段时间后(使用我的webapp)显示许多空闲的postgres进程导致服务器重载和e.x VPS杀死Java或拒绝连接到DB。我该怎么做才能解决问题?这是由我的代码或其他原因引起的问题吗?

2 个答案:

答案 0 :(得分:0)

您需要在session.close()块中放置try/finally

try {
  session.beginTransaction();
  =======
  HERE HQL QUERY/session.get/update/save etc are executed
  =======
  session.getTransaction().commit();
} catch (SQLException sqle) {
  // handle the exception, e.g. session.getTransaction().rollback();
} finally {
  session.close(); // this will require another try/catch
}

如果代码中某处发生异常,则会话不会关闭并泄漏资源。

答案 1 :(得分:0)

问题解决了。我做错了是在每个类的实例中创建新工厂。现在我在任何地方都添加了静态引用,它工作得非常好。