Рубрики
Без рубрики

Руководство для начинающих по JPA persistence.xml файл

Узнайте, что такое XML-файл конфигурации сохраняемости JPA и какова цель каждого XML-тега при попытке настроить приложение сохраняемости Java.

Автор оригинала: 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 параметры конфигурации файла очень важны, так как они позволяют выполнять самые разнообразные требования к отображению.