Поддержка миграции схем с помощью JPA? - PullRequest
25 голосов
/ 13 января 2010

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

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

Ура! * * 1005

Ответы [ 3 ]

11 голосов
/ 29 марта 2010

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

7 голосов
/ 20 января 2010

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

Если вы измените ваши bean-компоненты, вам придется вручную перенести существующую схему. Так что для миграции базы данных в стиле Rails вам придется искать в другом месте.

Однако вы можете легко сгенерировать начальные значения ddl из ваших компонентов Java. Пример ниже иллюстрирует создание схемы с 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 ...) вам придется обратиться к их конкретной документации.

0 голосов
/ 14 января 2010

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

У других поставщиков JPA могут быть другие свойства для этого.

...