Подтвердить что ты не робот

Требуется ли persistence.xml при работе с Spring и Hibernate?

Я использую проект с Spring JPA и Hibernate. Большинство вещей в файле persistence.xml можно указать в файле Spring applicationContext.xml.

Так требуется больше persistence.xml?

Спасибо.

4b9b3361

Ответ 1

Обновление: Spring 3.1 поддерживает persistence.xml -бесплатную конфигурацию JPA, см. Spring 3.1 M2: Улучшения конфигурации.


darioo ответ полезен для практического использования, но не является технически корректным.

PersistenceProvider имеет два метода factory:

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map) - для автономных сред persistence.xml должен быть проанализирован поставщиком непрерывности.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) - для сред сервера приложений persistence.xml был проанализирован сервером приложений, и его содержимое передается как PersistenceUnitInfo.

Spring LocalContainerEntityManagerFactoryBean эмулирует среду сервера приложений. Поэтому он сам анализирует persistence.xml, объединяет его содержимое со значениями из контекста приложения и передает его провайдеру сохранения, используя второй метод factory.

Однако процесс получения данных persistence.xml настраивается:

  • Вы можете настроить имя файла persistence.xml с помощью свойства persistenceXmlLocation - полезно избегать конфликтов со стратегиями инициализации по умолчанию JPA серверов приложений.

  • Вы можете полностью переопределить источник PersistenceUnitInfo, установив пользовательскую стратегию PersistenceUnitManager.

Итак, на самом деле вы можете настроить JPA в Spring без persistence.xml, написав пользовательский PersistenceUnitManager, хотя такой менеджер недоступен из коробки.

Ответ 2

persistence.xml необходим, когда вы используете Hibernate через JPA, даже если вы используете Spring JPA. Если вы используете Hibernate напрямую, то persistence.xml не требуется.

Ответ 3

В спецификации JPA не указано нигде, где требуется файл, но в определениях контрактов EntityManagerFactory и EntityManager и практически во всей спецификации файл persistence.xml упоминается снова и снова.

Недавно мне приходилось иметь дело с вопросом, можно ли программно настроить JPA 2.0 с Hibernate 3.6 без использования persistence.xml вообще.

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

Я никогда не использовал spring, хотя, поэтому я не знаю, использует ли он какие-либо трюки для решения этой проблемы.