2013-05-21 3 views

ответ

3

SessionFactory и Session являются спящими. EntityManager вызывает сессию hibernate под капотом. И если вам нужны какие-то специфические особенности, которые не доступны в EntityManager, вы можете получить сеанс по телефону:

Session session = entityManager.unwrap(Session.class); 
+0

Достаточно ли закрыть сеанс? Закроет ли вызов сеанса разворачивание в entityManager? Должен ли я закрывать entityManager, созданный из сеанса, независимо? – Sergey

15

Session является зимует конкретное API, EntityManager представляет собой стандартизированный API для JPA. Вы можете думать о EntityManager как о классе адаптера, который обертывает Session (вы даже можете получить объект Session с объекта EntityManager через функцию getDelegate()).

Это не отличается от других API Java (например, JDBC является стандартным API, каждый поставщик адаптирует свой продукт к API через драйвер, который реализует стандартные функции).

+0

Есть ли разница между ними в функциональности или они более или менее идентичны? – Alexey

+0

Они не идентичны (функции имеют разные имена и даже разные цели, аннотации разные и т. Д.). Что такое hibernate (и каждый другой поставщик JPA) - это обеспечить объект адаптера, который создает функциональность EntityManager, вызывая собственный API спящего режима. – EmirCalabuch

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