Обратный инженер DDL от сущностей JPA

Я играю с некоторыми вещами JPA, меняя сопоставления, чтобы увидеть,как они должны быть и т. д. Это элементарные эксперименты. Однако я не могу найти инструмент, который будет просто читать мои органы, а затем создать схему для меня. Я попытался найти что-то подобное в инструментах JBoss, но нада. Интеграция Eclipse будет огромным плюсом, но я возьму инструмент командной строки или задачу ant.

какие идеи?

8 ответов


Я не думаю, что есть универсальный способ сделать это с JPA, вы должны напрямую использовать базовую реализацию JPA для достижения этого.

на спящий режим, есть несколько возможностей:

  • используйте метод duffymo опубликовано ранее, что делает Hibernate автоматически обновлять схему базы данных.
  • если вы этого не хотите, вы можете использовать hbm2ddl С спящий Инструменты (Примечание: ссылка отстой, но, по-видимому, их домашняя страница немного сломана прямо сейчас). Вы можете использовать это для автоматического создания сценариев создания базы данных из ваших сущностей JPA; есть также плагины для Maven и Ant, которые вызывают hbm2ddl автоматически.

на EclipseLink (ранее Oracle TopLink, JPA 2.0 RI) см. использование расширений EclipseLink JPA для генерации схемы. В принципе это очень похоже на Hibernate, хотя на первый взгляд я не вижу ничего, что можно было бы использовать в качестве автономной утилиты для создания сценария БД.

другие реализации JPA (BEA/Oracle Kodo, Apache OpenJPA), вероятно, имеют свои собственные конкретные методы достижения этого.


попробуйте добавить следующее к вашей настойчивости.в XML

Для Спящий Режим:

создать:

<property name="hibernate.hbm2ddl.auto" value="update"/>

падение и создание:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

Для Toplink:

создать:

<property name="toplink.ddl-generation" value="create-tables"/>

падение и создание:

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

Для EclipseLink:

создать:

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

падение и создание:

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

когда я использую Hibernate, я просто добавляю это в свой файл конфигурации:

      <property name="hbm2ddl.auto">update</property>

заботится обо всем. Я не уверен, что эквивалент для JPA, но на него так сильно влияет Hibernate, что я был бы удивлен, если бы вы не смогли найти что-то подобное.

не требуется инструмент. Обычно я просто запускаю простой тест JUnit, и база данных создается для меня.


Я использую Hibernate в org.hibernate.tool.hbm2ddl.SchemaExport класс и этот небольшой метод

создайте схему в базе данных:

 public static void rebuildSchema()
 {
     configuration = new Configuration();
     configuration.configure();

     new SchemaExport(configuration)
         .setHaltOnError(true)
         .execute(false, true, false, false);
 }

чтобы создать DDL во внешнем файле, используйте этот вызов execute.

     new SchemaExport(configuration)
         .setHaltOnError(true)
         .setOutputFile(outputFile)
         .setImportFile("")
         .setDelimiter(";")
         .setFormat(true)
         .execute(false, false, false, true);

считается плохой формой установить "спящий режим".hbm2ddl.авто " на "обновление", так как автоматическое изменение производственной базы данных может ее нарушить. Для объяснения см. Hibernate hbm2ddl.авто возможные значения и что они делают?.


плагином maven:

        <plugin>
            <!-- run "mvn hibernate3:hbm2ddl" to generate a schema -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <hibernatetool>
                    <classpath>
                        <path location="${project.build.directory}/classes" />
                        <path location="${project.basedir}/src/main/resources/META-INF/" />                                               
                    </classpath>   

                    <jpaconfiguration persistenceunit="galleryPersistenceUnit" />                     
                    <hbm2ddl create="true" export="false" destdir="${project.basedir}/target" drop="true" outputfilename="mysql.sql" format="true" console="true"/>
                </hibernatetool>
            </configuration>
        </plugin>

DataNucleus имеет свой собственный SchemaTool, способный генерировать схему для вас или генерировать необходимые инструкции DDL для адаптации и применения.

--Энди (DataNucleus)


добавление в список Джеймса Макмахона:

Для OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

Антонио Гонсалвес говорит в его блог об API для создания схемы.
В JPA 2.1 generateSchema для этой цели был введен метод.

пример из блог:

public class Main {
    public static void main(String[] args) {
        Persistence.generateSchema("samplePU", null);
    }
}