Обратный инженер DDL от JPA - PullRequest
       11

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

19 голосов
/ 23 апреля 2009

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

Есть идеи?

Ответы [ 8 ]

16 голосов
/ 15 мая 2009

Попробуйте добавить следующее в ваш файл 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"/>
8 голосов
/ 23 апреля 2009

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

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

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

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

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

6 голосов
/ 23 апреля 2009

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

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

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

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

5 голосов
/ 27 августа 2013

По плагину 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>
4 голосов
/ 28 апреля 2012

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

сгенерировать схему в базе данных:

 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» значение «update» считается плохим, поскольку автоматическое изменение производственной базы данных может привести к ее поломке. Для объяснения см. Hibernate hbm2ddl.auto возможные значения и что они делают? .

2 голосов
/ 28 апреля 2012

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

Для OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
2 голосов
/ 23 апреля 2009

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

- Энди ( DataNucleus )

0 голосов
/ 29 сентября 2015

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

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

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