JPA или Hibernate для сохранения Java?

Я изучаю разработку Enterprise Applications в Java,.NET и Groovy. Для каждой платформы мы попытаемся понять, как сложно реализовать простой веб-сервис SOAP. Мы будем использовать инструменты и библиотеки, которые наиболее часто используются, чтобы как можно точнее исследовать реальный мир.

В этом отношении, если использовать Hibernate для сохранения, лучше ли это отразить реальный мир для использования нового JPA (API сохранения Java) или пользовательского API Hibernate, существовавшего до появления JPA?

Ответы

Ответ 1

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

Я бы рекомендовал использовать прямую JPA с Hibernate в качестве поставщика. И используйте аннотации, а не XML (гораздо приятнее).

Затем, когда вам нужно что-то дополнительное, вы всегда можете получить сеанс Hibernate. Например, я часто нахожу, что мне нужно сделать это, чтобы передать коллекцию запросу в качестве параметра (setParameterList).

Ответ 2

Забавно, как вы сформулировали свой вопрос

новый JPA... или простой старый Hibernate

Похоже, что он был навсегда, а другой только что был выпущен. Конечно, это не так. На JPA повлияло не только Hibernate, но и TopLink и сущность J2EE beans. Первая ссылка на проект JSR 220 вернулась с 2003 года - как это происходит для нового? Если вы используете JPA с Hibernate, вы все еще используете Hibernate и можете использовать любые собственные расширения Hibernate.

Итак, выбор за вами: используйте проприетарный API или используйте эквивалентный установленный и стандартный API...

Ответ 3

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

Я бы рекомендовал использовать Hibernate напрямую, и, как предлагает Дамо, аннотации вместо XML. Удостоверьтесь, что у вас есть четкое понимание "волшебства", которое приносит Hibernate. Если вы не будете осторожны, вы можете реально разбить базу данных. Например, существует проблема с запросом n + 1 в зависимости от того, как вы делаете @OneToOne:

Автоматическое объединение сборок Hibernate OneToOne (решение проблемы n + 1)

Я бы также рекомендовал использовать встроенную базу данных для тестов unit/integration в ваших запросах Hibernate и посмотреть SQL, сгенерированный, чтобы убедиться, что это похоже на то, что вы пишете вручную.