JPA - спящий режим
Может ли кто-то взглянуть на разницу между JPA и Hibernate.
Или эти взаимодополняющие понятия, которые будут использоваться вместе?
Ответы
Ответ 1
Грубо говоря, JPA является стандартом сообщества java, здесь спецификации, которые были реализованы (и расширены) ребятами из Hibernate (некоторая информация здесь).
Будучи спецификацией, вы не будете использовать JPA напрямую, а JPA-реализацию.
Помните, что если вы будете использовать расширения hibernate JPA, вы нарушите совместимость с другими реализациями JPA (хотя некоторые скажут "почему вы должны использовать другую реализацию JPA?" ).
Ответ 2
Обновление 2015: это очень старый вопрос, и многое изменилось за последние 6 лет. JPA API в наши дни довольно многофункциональны, и я рекомендую использовать JPA, поскольку все больше и больше инструментов и фреймворков совпадают с ним. Одним из примеров является Spring Data JPA: он удаляет множество шаблонов для общих задач и феноменально продуктивен:
http://projects.spring.io/spring-data-jpa/
Оригинальный ответ:
Я буду отвечать за комментарии cheng81, а также проголосовать за использование простых API-интерфейсов Hibernate. Набор функций JPA меньше, чем Hibernate, и я не вижу причин помешать себе "чистой JPA" только потому, что это "стандарт".
Ответ 3
Hibernate - действительно хорошее решение, однако его лицензия (GPL) означает, что он не может использоваться в некоторых проектах.
JPA - это спецификация, которая поддерживает ряд реализаций, включая Hibernate, но также OpenJPA и другие продукты с различными характеристиками.
Если вы можете уйти от использования только Hibernate, возможно, стоит сделать это как зрелый, стабильный и хорошо себя зарекомендовать. Однако, если вам нужно включить движок персистентности в продукт, который поставляется с лицензией, отличной от GPL, вам нужно перейти по пути JPA (или заплатить за коммерческую лицензию Hibernate).