Требуется ли файл persistence.xml при работе с Spring и Hibernate? - PullRequest
26 голосов
/ 19 января 2011

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

Так же требуется persistence.xml ?

Спасибо.

Ответы [ 3 ]

42 голосов
/ 19 января 2011

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

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

PersistenceProvider имеет два заводских метода:

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

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

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

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

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

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

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

6 голосов
/ 19 января 2011

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

1 голос
/ 09 апреля 2011

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

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

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

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

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