Разница ч/б Hibernate Sessionfactory.getCurrentSession () и SessionFactory.openSession()
Я немного путаюсь между этими двумя понятиями. Как я знаю, оба возвращают сеанс hibernate, SessionFactory.getCurrentSession() возвращает контекстный сеанс, основанный на свойстве <property name="current_session_context_class">, которое установлено в hibernate.контекстно-свободная грамматика.XML
Разве мы не должны всегда следовать этому подходу?
Какую дополнительную ценность добавляет SessionFactory.openSession()?
1 ответ:
Сеанс открывается всякий раз, когда
sf.getCurrentSession()вызывается в первый раз. Это создает совершенно новый сеанс, если он не существует, или использует существующий, если он уже существует.В Tomcat это связывает сеанс с потоком, который создается с использованием базового объекта
С другой стороны, методThreadLocal. Но поскольку Tomcat использует пул потоков, вполне возможно, что запрос может получить поток с уже связанной с ним сессией, таким образом, вводя возможность даже не создавать совершенно новый сессия. Другое дело, что сессия, которую вы получили с помощьюsf.getCurrentSession(), сбрасывается и закрывается автоматически.sf.openSession()создает новый сеанс, но не пытается связать его с потоком. Но помните, чтоsf.openSession()вводит еще одну загвоздку в том, что он ожидает, что пользователи будут обрабатывать закрытие и промывку сессий сами, вместо того, чтобы позволить Hibernate делать это автоматически для нас.
sf.getCurrentSession()обычно этого достаточно.sf.openSession()обеспечивает и облегчает большую уровень управления местом хранения и управления сеансом. Это, безусловно, продвинутый вариант.