Автор оригинала: Vlad Mihalcea.
Вступление
В этой статье я собираюсь объяснить, в чем заключается цель JPA persistence.xml
файл конфигурации и способ настройки приложения сохранения Java с использованием доступных XML-тегов или атрибутов.
Хотя приложения Spring могут загружаться без необходимости в файле конфигурации XML JPA, по-прежнему важно понимать значение каждого параметра конфигурации, поскольку Spring также предлагает альтернативный способ создания сохраняемости Java LocalContainerEntityManagerFactoryBean
или специфичный для гибернации LocalSessionFactoryBean
.
Блок Стойкости
В persistence.xml
файл конфигурации используется для настройки данного модуля сохранения JPA. Модуль сохранения определяет все метаданные , необходимые для начальной загрузки EntityManagerFactory
, такие как сопоставления сущностей, источник данных и параметры транзакций, а также свойства конфигурации поставщика JPA.
Цель EntityManagerFactory
используется для создания EntityManager
объектов, которые мы можем использовать для переходов в состояние сущности The goal of the EntityManagerFactory
Итак, persistence.xml
файл конфигурации определяет все метаданные, необходимые для начальной загрузки JPA EntityManagerFactory
.
Расположение XML-файла сохраняемости JPA
Традиционно, persistence.xml
находится в папке META-INF
, которая должна находиться в корневом каталоге пути к классам Java. Если вы используете Maven, вы можете сохранить его в папке ресурсы
, например так:
src/main/resources/META-INF/persistence.xml
Структура XML-файла JPA с сохраняемостью
В persistence.xml
файл конфигурации структурирован следующим образом:
Hypersistence Optimizer is a dynamic analyzing tool that can scan your JPA and Hibernate application and provide you tips about the changes you need to make to entity mappings, configurations, queries, and Persistence Context actions to speed up your data access layer. org.hibernate.jpa.HibernatePersistenceProvider java:global/jdbc/default
Настойчивость
тег является корневым XML-элементом и определяет версию JPA и XML-схему, используемые для проверки persistence.xml
файл конфигурации.
упорство-единица
Элемент persistence-unit
определяет имя связанного модуля сохранения JPA, который позже можно использовать для ссылки на него при использовании аннотации @PersistenceUnit
JPA для введения связанного EntityManagerFactory
экземпляр:
@PersistenceUnit(name = "HypersistenceOptimizer") private EntityManagerFactory entityManagerFactory;
Атрибут тип транзакции
определяет стратегию транзакции JPA, и он может принимать одно из следующих двух значений:
JTA
РЕСУРС_ЛОКАЛЬНЫЙ
Традиционно приложения Java EE по умолчанию использовали JTA, что требует наличия диспетчера транзакций JTA, который использует протокол 2PC (Двухфазная фиксация) для атомарного применения изменений к нескольким источникам данных (например, системам баз данных, очередям JMS, кэшам).
Если вы хотите распространить изменения на один источник данных, вам не нужен JTAG, поэтому тип транзакции RESOURCE_LOCAL
является гораздо более эффективной альтернативой. Например, по умолчанию приложения Spring используют RESOURCE_LOCAL
транзакции, а для использования JTA
, вам нужно явно выбрать JtaTransactionManager
компонент Spring.
описание
Элемент описание
позволяет предоставить более подробную информацию о целях текущего подразделения сохранения.
поставщик
Элемент provider
XML определяет полное имя класса, реализующего интерфейс JPA PersistenceProvider
.
Если вы используете Hibernate 4.3 или более новые версии, вам необходимо использовать org.hibernate.jpa. Поставщик HibernatePersistence
имя класса.
Если вы используете Hibernate 4.2 или более старые версии, вам необходимо использовать org.hibernate.ejb. Вместо этого имя класса HibernatePersistence
.
jta-источник данных и не-jta-источник данных
Очень необычно, что спецификация JPA определяет два разных XML-тега для предоставления имени JNDI источника данных
. Для этого должен был быть один атрибут источник данных
, поскольку тип транзакции
уже указывает, используется JTA или нет.
Нет, если вы используете JTA, вы можете использовать jta-источник данных
для указания имени JNDI для связанного JTA Источник данных
, в то время как для RESOURCE_LOCAL
вам необходимо использовать не-jta-источник данных
.
Если вы используете режим гибернации, вы также можете использовать свойство hibernate.connection.datasource
конфигурации для указания JDBC Источник данных
для использования.
свойства
Элемент свойства
позволяет определить свойства JPA или JPA, зависящие от поставщика, для настройки:
- гибернация
Диалект
- платформа транзакций JTA (например, GlassFish, JBoss, Bitronix, Atomikos)
- следует ли автоматически генерировать схему базы данных
- должен ли режим гибернации пропустить проверку автоматической фиксации транзакций RESOURCE_LOCAL
- активируйте медленный SQL – запрос бревно
- и многие другие свойства вы можете найти в файле
org.hibernate.cfg. Доступные настройки
интерфейс.
Параметры сопоставления сущностей
По умолчанию Hibernate способен находить классы сущностей JPA на основе наличия аннотации @Entity
, поэтому вам не нужно объявлять классы сущностей.
исключить-не включенные в список-классы
Однако, если вы хотите явно указать классы сущностей, которые будут использоваться, и исключить любые другие классы сущностей, найденные в текущем пути к классам Java, вам необходимо установить для элемента исключить-не включенные в список классы
значение верно
:
true
класс
После установки элемента exclude-unlisted-classes
XML выше вам необходимо указать список классов сущностей, зарегистрированных текущим блоком сохранения, с помощью элемента class
XML:
io.hypersistence.optimizer.forum.domain.Post io.hypersistence.optimizer.forum.domain.PostComment io.hypersistence.optimizer.forum.domain.PostDetails io.hypersistence.optimizer.forum.domain.Tag
Подавляющее большинство приложений JPA и Hibernate используют аннотации для создания метаданных объектно-реляционного сопоставления. Однако, даже если вы используете аннотации, вы все равно можете использовать сопоставления XML для переопределения метаданных статических аннотаций с помощью orm.xml
файл конфигурации.
Например, вы можете использовать генератор идентификаторов ПОСЛЕДОВАТЕЛЬНОСТЕЙ по умолчанию, используя аннотацию @SequenceGenerator
, и заменить ее на ИДЕНТИФИКАТОР
для MySQL, который не поддерживает последовательности баз данных.
Для получения более подробной информации об этой теме ознакомьтесь с этой статьей .
картографический файл
По умолчанию/| orm.xml файл конфигурации находится в папке
META-INF . Если вы хотите использовать другое расположение файла, вы можете использовать
файл сопоставления XML - элемент в
persistence.xml файл, вот так:
file:///D:/Vlad/Work/Examples/mappings/orm.xml
Для получения более подробной информации об использовании внешних orm.xml
файлы для предоставления сопоставлений JPA в формате XML, ознакомьтесь с этой статьей .
jar-файл
По умолчанию поставщик JPA будет сканировать текущий путь к классам Java для загрузки классов сущностей или XML-сопоставлений. Если вы хотите предоставить один или несколько файлов JAR для сканирования, вы можете использовать элемент jar-файл
, например:
lib/hypersistence-optimizer-glassfish-hibernate-example.jar
режим общего кэша
Элемент режим общего кэша
позволяет определить стратегию Режима общего кэша
для хранения сущностей в кэше второго уровня и может принимать одно из следующих значений:
ВСЕ
– хранит все объекты в кэше второго уровня,НЕТ
– сущности не хранятся в кэше второго уровня,ENABLE_SELECTIVE
– по умолчанию ни одна сущность не кэшируется, за исключением объектов, помеченных аннотацией@Cacheable(true)
, которые собираются для кэшированияDISABLE_SELECTIVE
– все сущности кэшируются по умолчанию, за исключением тех, которые помечены символом@Cacheable(ложь) DISABLE_SELECTIVE
– all entities are cached by default, except for the ones marked with the@Cacheable(false)
annotation аннотацияНЕ УКАЗАНО
– использует стратегию кэширования по умолчанию поставщика JPA. Это также значение по умолчанию, которое используется, когда элемент
Вы также можете переопределить стратегию режим общего кэша
программно, используя свойство javax.persistence.cache.storeMode
, например:
EntityManagerFactory entityManagerFactory = Persistence .createEntityManagerFactory( "HypersistenceOptimizer", Collections.singletonMap( "javax.persistence.cache.storeMode", SharedCacheMode.ENABLE_SELECTIVE ) );
режим проверки
Элемент режим проверки
XML определяет стратегию Режим проверки
, которая указывает поставщику JPA, следует ли ему проверять проверку компонентов сущностей во время выполнения.
Элемент режим проверки
может принимать следующие значения:
АВТО
– Если поставщик проверки компонентов будет найден в текущем пути к классам Java, он будет зарегистрирован автоматически, и все сущности будут проверены. Если поставщик проверки компонентов не найден, сущности не проверяются. Это значение по умолчанию.ОБРАТНЫЙ ВЫЗОВ
– Сущности всегда должны проверяться поставщиком проверки компонентов. Если поставщик JPA не найдет реализацию проверки компонентов в пути к классу, процесс начальной загрузки завершится неудачно.НЕТ
– Сущности не проверяются, даже если поставщик проверки компонентов найден в пути к классу.
Вы также можете переопределить стратегию режим проверки
программно, используя свойство javax.persistence.validation.mode
, например:
EntityManagerFactory entityManagerFactory = Persistence .createEntityManagerFactory( "HypersistenceOptimizer", Collections.singletonMap( "javax.persistence.validation.mode", ValidationMode.CALLBACK ) );
Вывод
XML-файл конфигурации сохраняемости Java позволяет определить конфигурацию модуля сохраняемости, которую вы можете позже загрузить с помощью Java EE или Spring.
Зная все persistence.xml
параметры конфигурации файла очень важны, так как они позволяют выполнять самые разнообразные требования к отображению.