JPA сам по себе является просто спецификацией, а не продуктом, он не может выполнять постоянство или что-то еще сам по себе JPA - это просто набор интерфейсов и требует реализации (поставщик постоянства). Существуют открытые и коммерческие реализации JPA (Toplink Essentials, EclipseLink, Hibernate EntityManager, OpenJPA, Kodo и т. Д.), И любой сервер приложений Java EE 5 (или Java EE 6) должен обеспечивать поддержку для его использования (JBoss использует Hibernate EntityManager, GlassFish v2 по умолчанию использует Toplink Essentials, GlassFish v3 по умолчанию использует EclipseLink, WebLogic по умолчанию использует Kodo и т. д.) 1 .
Теперь одна из приятных вещей с JPA заключается в том, что его можно использовать вне контейнера, например, в приложении Java SE или в контексте тестирования (это было одной из больших проблем в EJB 2.x). Но в этом случае вам необходимо предоставить реализацию, поскольку вы не получите реализацию, предоставленную контейнером. Как мы видели, Hibernate EntityManager - который построен на основе Hibernate Core - является одним из них, и это может объяснить, почему вы его видите.
1 Обратите внимание, что большинство (все?) Контейнеров предлагают способ заменить реализацию по умолчанию, которую они предоставляют. Например, можно использовать Hibernate вместо Kodo с Weblogic или вместо EclipseLink с GlassFish. Это может быть еще одна причина, почему вы видите это в миксе.