JPA предоставляет подмножество функций Hibernate, но EJB3 предоставляет другие службы, которые Hibernate не обращается (например, веб-службы, EJB, служба таймера)
JPA предлагает следующие преимущества по сравнению с Hibernate:
- Стандартизированный API
- Независимость от поставщика (может переключаться между Hibernate, TopLink, OpenEJB и т. Д.)
Hibernate предлагает следующие преимущества:
- Широко используется
- Стандарт де-факто
- Прямая поддержка от Spring, Grails и т. Д.
- Возможно, лучшая поддержка инструментов
- Больше возможностей, чем у JPA
Что вы можете сделать, это написать свое приложение в EJB с использованием JPA, а затем при необходимости использовать специфичные для Hibernate функции. Или просто используйте обычный Hibernate для обеспечения устойчивости, если вас не волнует стандартизация и привязка к поставщику. Реально вряд ли вы переключитесь между Hibernate и другим провайдером, но это происходит.