JPA или Hibernate для постоянства Java? - PullRequest
13 голосов
/ 08 мая 2009

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

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

Ответы [ 3 ]

14 голосов
/ 08 мая 2009

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

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

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

1 голос
/ 09 мая 2009

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

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

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

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

0 голосов
/ 12 августа 2013

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

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

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

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

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