2016-08-21 26 views
0

私はこのコードフラグメントを繰り返し呼び出し、私はそれを呼び出すたびにメモリの要求が増え続けています。Hibernateメモリリーク

呼び出しごとにメモリを解放するにはどうすればよいですか?

 final Session session = Hibernate.getSessionFactory().openSession(); 
 
     try { 
 
      Transaction tx = session.getTransaction(); 
 
      tx.begin(); 
 
      final ProjectionList projList = Projections.projectionList(); 
 
      projList.add(Projections.count("totalLinePrice")); 
 
      projList.add(Projections.sum("totalLinePrice")); 
 
      final Object[] sum = (Object[]) session 
 
        .createCriteria(OrderR.class) 
 
        .setProjection(projList) 
 
        .add(Restrictions.eq("shopId", getShopR().getId())) 
 
        .add(Restrictions.gt("dtime", ord.monthBackTime)) 
 
        .uniqueResult(); 
 
      ord.num = (int) sum[0]; 
 
      ord.revenueTotal = (long) sum[1]; 
 
      tx.commit(); 
 
     } catch (HibernateException e) { 
 
      throw new Bug(e); 
 
     } finally { 
 
      session.flush(); 
 
      session.clear(); 
 
      session.close(); 
 
     }

答えて

0

代わりにEntityManagerを使用してみてください。 entitymanager.unwrap()を使って、基本となるHibernateessionを取得できます。

1

Eclipseで作業している場合は、「Eclipse Memory Analyzer」を使用して、Javaヒープ使用の詳細を提供できます。 Hibernate sessionFactoryの内部状態は不変なので、Hibernate.getSessionFactory()はシングルトンパターンに従うことを望みます。

助けてくれたら教えてください!