2013-05-31 4 views
0

У меня слишком много используемых потоков. У меня заканчивается нехватка памяти в моих модульных тестах. Мне нужно закрыть сеанс, если я использую sessionFactory. Не будет ли фиксация ниже завершения сеанса?Hibernate: вам нужно вручную закрыть sessionFactory?

Session session = sessionFactory.getCurrentSession(); 
    Transaction transaction = null; 

    try 
    { 
     transaction = session.beginTransaction(); 
     transaction.commit(); 
    } 
    catch (Exception e) 
    { 
     if (transaction != null) 
     { 
     transaction.rollback(); 
     throw e; 
     } 
    } 
    finally 
    { 
     //Is this close necessary? 
     session.close(); 
    } 

ответ

0

Нет, это не закончит сессию. Один сеанс может охватывать любое количество транзакций. Закройте сеанс явно. Кстати, такие вещи четко документированы.

+0

Собственно, это зависит от CurrentSessionContext. JTASessionContext закрывает сеанс, когда транзакция выполняется/откат, а также ThreadLocalSessionContext. Пример в документации НЕ закрывает сеанс. См. Http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#transactions-demarcation-nonmanaged –

+0

Да, Марко, возьмите это. Именно поэтому я задал этот вопрос. – stackoverflow

0

В случае улова вы убедитесь, что транзакция isActive() тоже.

Смежные вопросы