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

Обратный инженер DDL из объектов JPA

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

Любые идеи?

4b9b3361

Ответ 1

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

Для Hibernate существует несколько возможностей:

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

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

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

Ответ 2

Попробуйте добавить следующее к вашему persistence.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"/>

Ответ 3

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

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

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

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

Ответ 4

Я использую класс 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);

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

Ответ 5

Плагин 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>

Ответ 6

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

- Энди (DataNucleus)

Ответ 7

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

Для OpenJPA:

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

Ответ 8

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

Пример из блога:

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