Я использую проект с 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, хотя, поэтому я не знаю, использует ли он какие-либо трюки для решения этой проблемы.