Я использую проект с Spring JPA и Hibernate. Большинство вещей в файле persistence.xml можно указать в файле Spring applicationContext.xml.
Так требуется больше persistence.xml?
Спасибо.
Я использую проект с Spring JPA и Hibernate. Большинство вещей в файле persistence.xml можно указать в файле Spring applicationContext.xml.
Так требуется больше persistence.xml?
Спасибо.
Обновление: 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
, хотя такой менеджер недоступен из коробки.
persistence.xml
необходим, когда вы используете Hibernate через JPA, даже если вы используете Spring JPA. Если вы используете Hibernate напрямую, то persistence.xml
не требуется.
В спецификации JPA не указано нигде, где требуется файл, но в определениях контрактов EntityManagerFactory и EntityManager и практически во всей спецификации файл persistence.xml упоминается снова и снова.
Недавно мне приходилось иметь дело с вопросом, можно ли программно настроить JPA 2.0 с Hibernate 3.6 без использования persistence.xml вообще.
Я пришел к выводу, что это невозможно, хотя вы можете настроить файл на минимальную конфигурацию. Я решил, что файл должен содержать хотя бы имя вашей единицы персистентности. Остальная информация может быть программно предоставлена диспетчеру сущности factory в качестве параметров.
Я никогда не использовал spring, хотя, поэтому я не знаю, использует ли он какие-либо трюки для решения этой проблемы.