Использование Hibernate 3.0 с EJB 3.0 и JPA - PullRequest
3 голосов
/ 24 февраля 2010

Где я работаю, ребята, которые сидят напротив меня, работают над проектом. Это приложение JavaEE, которое использует Struts, Spring, EJB 3.0, JPA и Hibernate 3.0. Они используют бины сущностей EJB 3.0 с аннотациями. Я спрашивал их, почему Hibernate 3.0 находится в этом миксе, и никто не может сказать мне. Такое ощущение, что они включили Hibernate 3.0, потому что им сказали, но они не используют его ни для чего, чего они не могут получить от EJB 3.0 entity-bean / JPA. Они используют CMP и получают доступ ко всем функциям базы данных через EJB.

Может ли Hibernate дать вам что-нибудь в этой настройке, которое не может быть предоставлено EJB 3.0 / JPA?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2010

Hibernate имеет реализацию JPA, но также может использоваться автономно. Можно использовать Hibernate в качестве поставщика постоянства в JavaEE. Сервер приложений JBoss, например, использует Hibernate для своей устойчивости. Поэтому, если вы используете Hibernate для обеспечения постоянства на сервере приложений, это может иметь смысл.

Если вы используете сервер приложений, который не использует Hibernate для постоянного хранения, то, похоже, он вам не нужен. Hibernate имеет некоторые расширения и вещи, которые не доступны в JPA. Многие другие поставщики персистентности также имеют эти расширения (например, Toplink или Eclipselink). Уточните у своего сервера приложений, есть ли у вас расширения, которые могут вам понадобиться, или что-то подобное тому, что вы могли использовать в Hibernate.

2 голосов
/ 25 февраля 2010

JPA сам по себе является просто спецификацией, а не продуктом, он не может выполнять постоянство или что-то еще сам по себе JPA - это просто набор интерфейсов и требует реализации (поставщик постоянства). Существуют открытые и коммерческие реализации JPA (Toplink Essentials, EclipseLink, Hibernate EntityManager, OpenJPA, Kodo и т. Д.), И любой сервер приложений Java EE 5 (или Java EE 6) должен обеспечивать поддержку для его использования (JBoss использует Hibernate EntityManager, GlassFish v2 по умолчанию использует Toplink Essentials, GlassFish v3 по умолчанию использует EclipseLink, WebLogic по умолчанию использует Kodo и т. д.) 1 .

Теперь одна из приятных вещей с JPA заключается в том, что его можно использовать вне контейнера, например, в приложении Java SE или в контексте тестирования (это было одной из больших проблем в EJB 2.x). Но в этом случае вам необходимо предоставить реализацию, поскольку вы не получите реализацию, предоставленную контейнером. Как мы видели, Hibernate EntityManager - который построен на основе Hibernate Core - является одним из них, и это может объяснить, почему вы его видите.

1 Обратите внимание, что большинство (все?) Контейнеров предлагают способ заменить реализацию по умолчанию, которую они предоставляют. Например, можно использовать Hibernate вместо Kodo с Weblogic или вместо EclipseLink с GlassFish. Это может быть еще одна причина, почему вы видите это в миксе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...