EJB 3 или Hibernate 3
Что касается веб-приложения Java EE, которое будет обслуживаться полноценным сервером приложений Java EE, например GlassFish, какое решение ORM является лучшим? EJB 3 или Hibernate 3 А почему?
3 ответа
Эти два совершенно разные.
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 в веб-приложении
Что вы спросили, какой API лучше: EJB3 (JPA) или Hibernate? Я сказал это, потому что вы спрашиваете о EJB3 JPA (который является только API) и Hibernate (который является реализацией и API). Таким образом, чтобы сравнить яблоки с яблоками, нужно сравнить API. Вы выбираете между стандартным (JPA) и более мощным проприетарным API (Hibernate).
Но, выбрав JPA, нужно сделать еще один выбор: для его реализации. Выбрав Hibernate для реализации, вы можете отказаться от своего вопроса, так как доступны как JPA, так и Hibernate.
Таким образом, ваш вопрос изменится: какую реализацию JPA выбрать (между Hibernate, EclipseLink, OpenJPA, DataNucleus и т. Д.)?...
Они похожи; 3.0 спецификации для EJB взяли много от Hibernate и Spring.
У меня нет точных показателей для цитирования, но я бы сказал, что если вы используете Glassfish, для меня имеет смысл использовать все его технологии. Зачем вводить другую зависимость? Посмотрите, сможет ли Glassfish сделать эту работу за вас.