Persistence provider может быть настроен на автоматическое создание таблиц базы данных, загрузку данных в таблицы и удаление таблиц во время развёртывания приложения с использованием стандартных свойств в дескрипторе развёртывания приложения. Эти задачи обычно используются на этапе разработки, но не для рабочей базы данных.
Ниже приведён пример дескриптора развёртывания persistence.xml
, который предписывает persistence provider-у удалить все артефакты, создать новые и загрузить данные из предоставленного сценария при развёртывании приложения:
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="examplePU" transaction-type="JTA">
<jta-data-source>java:global/ExampleDataSource</jta-data-source>
<properties>
<property name="javax.persistence.schema-generation.database.action"
value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source"
value="script"/>
<property name="javax.persistence.schema-generation.create-script-source"
value="META-INF/sql/create.sql" />
<property name="javax.persistence.sql-load-script-source"
value="META-INF/sql/data.sql" />
<property name="javax.persistence.schema-generation.drop-source"
value="script" />
<property name="javax.persistence.schema-generation.drop-script-source"
value="META-INF/sql/drop.sql" />
</properties>
</persistence-unit>
</persistence>
Настройка приложения для создания или удаления таблиц базы данных
Свойство javax.persistence.schema-generation.database.action
используется для указания действия, выполняемого persistence provider-ом при развёртывании приложения. Если свойство не установлено, persistence provider не будет создавать или удалять артефакты базы данных.
Таблица 40-3 Действия по созданию схемы
Значение настройки |
Описание |
none
|
Создание и удаление схемы не производится. |
create
|
Persistence provider создаст артефакты базы данных при развёртывании приложения. Артефакты останутся неизменными после повторного развёртывания приложения. |
drop-and-create
|
Все артефакты в базе данных будут удалены, и persistence provider создаст артефакты базы данных при развёртывании. |
drop
|
Все артефакты в базе данных будут удалены при развёртывании приложения. |
В этом примере persistence provider удалит все оставшиеся артефакты базы данных, а затем создаст артефакты при развёртывании приложения:
<property name="javax.persistence.schema-generation.database.action"
value="drop-and-create"/>
По умолчанию объектно-реляционные метаданные в юните персистентности используются для создания артефактов базы данных. Вы также можете предоставить сценарии, используемые provider-ом для создания и удаления артефактов базы данных. Свойства javax.persistence.schema-generation.create-source
и javax.persistence.schema-generation.drop-source
определяют, как persistence provider будет создавать или удалять артефакты базы данных.
Таблица 40-4. Настройки для создания и удаления свойств источника
Значение настройки |
Описание |
metadata
|
Используйте объектно-реляционные метаданные в приложении для создания или удаления артефактов базы данных. |
script
|
Укажите скрипт для создания или удаления артефактов базы данных. |
metadata-then-script
|
Используйте комбинацию объектно-реляционных метаданных, а затем предоставленный сценарий для создания или удаления артефактов базы данных. |
script-then-metadata
|
Используйте комбинацию предоставленного сценария, а затем метаданные объектно-реляционных метаданных для создания и удаления артефактов базы данных. |
В этом примере persistence provider будет использовать сценарий, упакованный в приложении, для создания артефактов базы данных:
<property name="javax.persistence.schema-generation.create-source"
value="script"/>
Если вы указываете скрипт в create-source
или drop-source
, укажите местоположение скрипта, используя свойства javax.persistence.schema-generation.create-script -source
или javax.persistence.schema-generation.drop-script-source
. Расположение скрипта относительно корня юнита персистентности:
<property name="javax.persistence.schema-generation.create-script-source"
value="META-INF/sql/create.sql" />
В приведённом выше примере для create-script-source
задан файл SQL с именем create.sql
в каталоге META-INF/sql
относительно корня юнита персистентности.
Загрузка данных с использованием сценариев SQL
Если вы хотите заполнить таблицы базы данных данными до загрузки приложения, укажите расположение сценария загрузки в свойстве javax.persistence.sql-load-script-source
. Местоположение, указанное в этом свойстве, указывает относительный путь от юнита персистентности.
В этом примере сценарий загрузки представляет собой файл data.sql
в каталоге META-INF/sql
относительно корня юнита персистентности:
<property name="javax.persistence.sql-load-script-source"
value="META-INF/sql/data.sql" />