Эти два абсолютно разные.
EJB3
является компонентной моделью и не имеет прямого отношения к ORM.Он помогает легко управлять транзакциями и дает вам легкий доступ к диспетчеру сущностей из JPA, который является стандартизированным решением ORM в Java EE.
Hibernate
(3) действительно является решением ORM, и, поскольку онобывает тот, который реализует JPA.
Таким образом, более логичный вопрос заключается в том, использовать ли стандартизированные интерфейсы JPA или напрямую использовать ядро API Hibernate.Тогда последующим вопросом может быть использование автономного JPA или в сочетании с EJB 3.
Ответ немного зависит от того, что именно вам нужно, но обычно использование JPA в сочетании с EJB 3 является самым простым решением.Использование автономного JPA или Hibernate требует гораздо более подробного кода, и вам придется вручную управлять транзакциями, что может быть проблемой.
JPA против Hibernate - еще одна дискуссия.Преимущество JPA заключается в наличии стандартизированных интерфейсов, поэтому больше разработчиков, вероятно, будут знакомы с ним.С другой стороны, нативные Hibernate API-интерфейсы всегда являются расширенным набором API-интерфейсов JPA и, таким образом, предлагают больше возможностей.
Как правило, разработчики основывают свой код на JPA, а затем используют определенные аннотации Hibernate или вызовы API, где это имеет смысл.В 99,99% случаев такое смешанное использование API поддерживается.
Также обратите внимание, что Glassfish в комплекте с EclipseLink
, а не с Hibernate.EclipseLink сравним с Hibernate, но предшествует ему более десяти лет.Hibernate многое взял от EclipseLink (тогда он назывался TopLink).
См. Также ответ, который я дал на аналогичный вопрос: Доступ к таблице базы данных через JPA Vs.EJB в веб-приложении