2013-03-06 2 views
1

Каковы различия между этими подходами и какой из них лучше? До сих пор я не имею куски кода, как следующее:spring/hibernate: открыть/закрыть сессию каждый раз VS getCurrentSession

public void delete(Song song) { 
    session = sessionFactory.getCurrentSession(); 
    session.delete(song); 
    session.flush(); 
} 

, но запись не всегда удаляется, когда выше код запускается (именно: ID = 1 никогда не удаляется и другие идентификаторы удаляются всегда). Я читал, что сохранение открытого сеанса немного ускоряет работу приложения - вот почему я делю сессионный объект. Мой бизнес-объект получить сеанс завода через DI:

@Autowired 
private SessionFactory sessionFactory; 

Session session = null; 

public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

ответ

2

Основываясь на моем expereince с Hibernate, я пришел к выводу, что лучшей стратегией является, чтобы соответствовать продолжительности сеанса жизни Hibernate с длительностью одной транзакции. Исходя из ваших конкретных потребностей, вам может потребоваться сделать что-то еще, но я уверен, что предлагаемый startegy будет работать в 95% практических случаев.

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