Hibernate и JPA, что использовать, где? - PullRequest
7 голосов
/ 24 июня 2010

Может кто-нибудь объяснить мне, в чем основные различия между JPA и Hibernate?

Где использовать Hibernate?

Где использовать JPA?

Почему бы не сущностьбоб?

Ответы [ 6 ]

7 голосов
/ 24 июня 2010

Немного истории:

Бины сущностей были частью EJB 1 и 2. С ними было адски работать, поэтому была альтернатива.Затем появился Hibernate.(Я не помню этого времени)

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

JPA - это просто спецификация - она ​​определяет, что должна делать инфраструктура ORM, и какие аннотации она должна поддерживать.JPA реализуется многими поставщиками - Hibernate, EclipseLink, OpenJPA и т. Д.

Итак:

  • не используйте бины Entity
  • используйте любую реализацию JPA, которую вы используетелайк.Hibernate, безусловно, хороший выбор.

Обновление: О вашем дополнительном вопросе в комментариях:

Да, вы можете использовать JPA с компонентами EJB Session:

@Stateless
public class YourSessionBean implements RemoteInterface {

     @PersistenceContext
     private EntityManager entityManager; // this is the JPA EntityManager
}

И менеджер сущностей внедрен контейнером и готов к работе с сущностями JPA.Конечно, для этого вам нужно будет выполнить настройки, но это выходит за рамки этого вопроса.

3 голосов
/ 24 июня 2010

JPA является спецификацией.Hibernate является одной из реализаций спецификации.Другой реализацией является Toplink, но есть и другие.

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

2 голосов
/ 24 июня 2010

Я считаю, что для практических целей все реализации JPA, включая hibernate, чрезвычайно похожи и будут работать для тех же вариантов использования.Тем не менее, они, как правило, немного, ааааа, темпераментны, если они используются для вещей, для которых они не предназначены.

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

iBatis позволяет вам писать простые SQL-запросы в отдельном файле и отображать их в Java-объектах.Это удерживает код SQL от вашего кода Java.Вы даете запросам имя и ссылаетесь на это имя в своем коде.Это очень хорошо работает с более крупной устаревшей базой данных, в которую необходимо интегрироваться.

Для некоторых простых неформальных запросов такие вещи, как Spring JdbcTemplate, также хорошо работают без когнитивной загрузки предыдущих платформ.

1 голос
/ 24 июня 2010

Здесь вы можете найти более глубокое понимание вопроса: JPA и Hibernate презентация

1 голос
/ 24 июня 2010

Различия незначительны и довольно сложны для понимания:

  1. JPA - это API Java EE для объектно-реляционного отображения.У вас должен быть JPA на каждом полном сервере приложений Java EE на земле.
  2. Hibernate - это реализация JPA от JBoss.Причина, по которой люди часто путают оба, заключается в том, что JPA несколько вдохновлен Hibernate.
  3. Entity Bean - это просто концепция.Эта концепция означает, что вы будете представлять персистентные объекты решения Java EE с помощью классов Java.То есть, если у вас есть клиенты в вашей системе, вы, вероятно, будете иметь объектный компонент Customer для каждого клиента в вашей базе данных.Вы управляете (создаете, обновляете, удаляете, извлекаете) свои бины сущности с помощью JPA.Люди иногда путают Entity Beans со старыми реализациями Entity Beans в Java EE 1.4 и предыдущих версиях.По правде говоря, вы можете иметь Entity Beans с JPA / Hibernate (или JPA / Toplink) на более новых серверах приложений Java.
0 голосов
/ 24 июня 2010

Список некоторых основных поставщиков JPA находится в разделе http://en.wikipedia.org/wiki/Java_Persistence_API в разделе JPA2.

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

...