Может кто-нибудь объяснить мне, в чем основные различия между JPA и Hibernate?
Где использовать Hibernate?
Где использовать JPA?
Почему не объектный компонент?
Может кто-нибудь объяснить мне, в чем основные различия между JPA и Hibernate?
Где использовать Hibernate?
Где использовать JPA?
Почему не объектный компонент?
Немного истории:
Компоненты Entity Bean были частью EJB 1 и 2. Работать с ними было чертовски сложно, поэтому появилась альтернатива. Потом появился Hibernate. (Я не помню этих времен)
Hibernate превратился в стандарт де-факто в объектно-реляционном отображении. Затем было решено, что необходим стандарт, поэтому была создана спецификация JPA под сильным влиянием Hibernate.
JPA - это просто спецификация - она определяет, что должна делать структура ORM и какие аннотации она должна поддерживать. JPA реализуется многими производителями - Hibernate, EclipseLink, OpenJPA и т. Д.
So:
Обновление: по поводу вашего второстепенного вопроса в комментариях:
Да, вы можете использовать JPA с EJB Session beans:
@Stateless
public class YourSessionBean implements RemoteInterface {
@PersistenceContext
private EntityManager entityManager; // this is the JPA EntityManager
}
И у вас есть диспетчер сущностей, введенный контейнером и готовый к работе с сущностями JPA. Конечно, для этого вам нужно будет настроить конфигурацию, но это выходит за рамки этого вопроса.
JPA - это спецификация. Hibernate - это одна из реализаций спецификации. Еще одна реализация - Toplink, но есть и другие.
Вы должны стараться как можно больше полагаться на стандартные функции JPA. Однако есть несколько полезных функций, специфичных для Hibernate, но они сделают ваше приложение менее переносимым, если вы решите переключить реализацию.
Под entity-компонентом вы подразумеваете entity-компонент EJB 2.x? Это «мертвая» технология, которую оказалось слишком сложно использовать.
Я считаю, что для практических целей все реализации JPA, включая спящий режим, очень похожи и будут работать для одних и тех же вариантов использования. Однако они имеют тенденцию быть немного, ээээ ..., темпераментными, если используются для вещей, для которых они не были созданы.
Поскольку вы, похоже, выбираете фреймворк постоянства, я хотел бы обратить ваше внимание на то, что есть другие фреймворки, которые очень хорошо работают в других случаях использования, где сложно использовать JPA.
iBatis позволяет писать простые запросы SQL в отдельном файле и сопоставлять их с объектами Java. Благодаря этому код SQL не попадает в ваш Java-код. Вы даете запросам имя и ссылаетесь на это имя в своем коде. Это очень хорошо работает с более крупной устаревшей базой данных, с которой вам необходимо выполнить интеграцию.
Для некоторых простых неформальных запросов такие вещи, как Spring JdbcTemplate, также хорошо работают без когнитивной нагрузки предыдущих фреймворков.
Здесь вы можете найти более подробное представление о вопросе: Презентация JPA и Hibernate
Различия тонкие, и их довольно сложно понять:
Список некоторых основных поставщиков JPA находится на http://en.wikipedia.org/wiki/Java_Persistence_API в разделе JPA2.
Лучше всего принимать собственные решения относительно реализации, поскольку именно вы будете поддерживать свое приложение, но всегда придерживайтесь стандартных функций, а не «надстроек»; вы выиграете в долгосрочной перспективе