Подтвердить что ты не робот

Поддержка миграции схем с помощью JPA?

Недавно я кратко посмотрел на JPA, и мне было интересно, что такое сделка с миграциями схемы базы данных и оставаясь в очереди с созданными вами классами.

Есть ли поддержка в JPA для этого? Утилиты? Лучшие практики?

Ура!

4b9b3361

Ответ 1

Я не буду полагаться на поставщиков JPA для обновления схемы базы данных. Проверьте Liquibase для одного из хороших подходов.

Ответ 2

Короткий ответ нет.

Если вы измените свой beans, вам придется перенести существующую схему вручную. Поэтому для миграции баз данных стиля Rails вам придется искать в другом месте.

Однако вы можете легко создать начальную ddl с вашего Java beans. Пример ниже иллюстрирует создание схемы с EclipseLink версии 2.0:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="JPATestPU" transaction-type="RESOURCE_LOCAL">
        <provider>
            org.eclipse.persistence.jpa.PersistenceProvider
        </provider>
        <class>org.randompage.MyEntity</class>
        <properties>
            <property name="javax.persistence.jdbc.user" value="johndoe"/>
            <property name="javax.persistence.jdbc.password" value="secret"/>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
            <property name="eclipselink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>

Ключевым элементом здесь является

 <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 

Это говорит EclipseLink об отбрасывании существующих таблиц и генерации нового один раз из вашего JPA-сопоставления. Эта процедура отличается высокой спецификой для поставщиков, поэтому для других поставщиков JPA (Hibernate, OpenJPA...) вам придется проконсультироваться со своей конкретной документацией.

Ответ 3

Если вы установите generateDdl в Hibernate (если это базовая реализация), тогда он генерирует схему базы данных в соответствии с вашим текущим диалектом. Поэтому после изменения диалекта он автоматически генерирует базу данных.

Другие поставщики JPA могут иметь для этого разные свойства.