2011-01-09 2 views
11

Что касается веб-приложения Java EE, которое будет обслуживаться полным сервером приложений Java EE, например. GlassFish, который является лучшим ORM Решение? EJB 3 или Hibernate 3 И почему?EJB 3 или Hibernate 3

+1

Существует множество других решений настойчивости, которые имеют очевидные преимущества; вы, кажется, проигнорировали их в своем вопросе, и поэтому любой ответ о том, что является «лучшим», произволен. Вероятно, что самое лучшее зависит от самого приложения, разработчиков, которые его пишут, и используемого хранилища данных ... и вы не предоставили информацию об этих – DataNucleus

ответ

27

Эти два совершенно разные.

EJB3 является составной моделью и не имеет ничего общего с ORM. Это помогает легко управлять транзакциями и дает вам легкий доступ к диспетчеру сущности из JPA, который является стандартизованным ORM-решением в Java EE.

Hibernate (3) действительно является решением ORM, и, как это бывает, оно реализует JPA.

Таким образом, более логичным вопросом является использование стандартизированных интерфейсов JPA или непосредственное использование API ядра Hibernate. Тогда может возникнуть вопрос о том, следует ли использовать JPA автономно или в комбинации с EJB 3.

Ответ зависит от того, что вам нужно в точности, но, как правило, использование JPA в сочетании с EJB 3 является самым простым решением. Использование автономной системы JPA или Hibernate требует гораздо более подробного кода, и вам необходимо вручную управлять транзакциями, что может быть больно.

JPA против Hibernate - еще одна дискуссия. JPA имеет преимущество от стандартизованных интерфейсов, поэтому больше разработчиков, скорее всего, будут с ним знакомы. С другой стороны, родные API-интерфейсы Hibernate всегда представляют собой супер-набор из JPA и, следовательно, предлагают больше возможностей.

Обычно разработчики основывают свой код на JPA, а затем используют некоторые аннотации Hibernate или вызовы API, где это имеет смысл. В 99,99% случаев поддерживается такое смешанное использование API.

Также обратите внимание, что Glassfish поставляется с EclipseLink, а не с гибернацией. EclipseLink сопоставим с Hibernate, но предшествует ему более десяти лет. Hibernate взял много от EclipseLink (тогда назывался TopLink).

Смотрите также этот ответ я дал на аналогичный вопрос: Database table access via JPA Vs. EJB in a Web-Application

-1

Они похожи; спецификация 3.0 для EJB занимала много времени от Hibernate и Spring.

У меня нет каких-либо твердых показателей для цитирования, но я бы сказал, что если вы используете Glassfish, для меня имеет смысл использовать всю свою технологию. Зачем вводить другую зависимость? Посмотрите, сможет ли Glassfish выполнить эту работу за вас.

5

Что вы спросили есть что API лучше: EJB3 (JPA) или спящий режим? Я сказал это, потому что вы спрашиваете о EJB3 JPA (только для API) и Hibernate (это реализация и API). Таким образом, для сравнения яблок с яблоками вам нужно сравнить API. Вы выбираете стандартный (JPA) и более мощный API-интерфейс (Hibernate).

Но, выбирая JPA, есть еще один выбор: для его реализации. Выбрав Hibernate для реализации, вы можете в принципе отказаться от своего вопроса, поскольку доступны JPA и Hibernate.

Таким образом, ваш вопрос изменится: какую реализацию JPA я должен выбрать (между Hibernate, EclipseLink, OpenJPA, DataNucleus и т. Д.)? ...

+0

Обратите внимание, что * EJB3 (JPA) * может быть немного сбивает с толку. Это предполагает, что EJB3 является другим именем JPA, но это не так. Это уже было технически полностью отдельная спецификация в EJB 3.0, и это было формализовано в текущей версии EJB версии 3.1. JPA не является технически и организационно совершенно другой спецификацией. Вы не можете каким-либо образом менять условия. –

+0

Все, что я имел в виду, - это следовать терминологии в вопросах Эссуна. Спасибо за разъяснения. – topchef