Reverse engineer DDL z jednostek JPA

Bawię się trochę JPA, zmieniam mapowania, żeby zobaczyć jak mają być itp. To podstawowe eksperymenty. Jednak nie mogę znaleźć narzędzia, które po prostu odczytać moje encje, a następnie wygenerować schemat tabeli dla mnie. Próbowałem znaleźć coś takiego w JBoss tools, ale nic. Integracja z Eclipse będzie ogromnym plusem, ale wezmę narzędzie wiersza poleceń lub zadanie ant.

Jakieś pomysły?

Author: James McMahon, 2009-04-23

8 answers

Myślę, że nie ma uniwersalnego sposobu na zrobienie tego z JPA, aby to osiągnąć, musisz bezpośrednio użyć podstawowej implementacji JPA.

Dla Hibernate istnieje kilka możliwości:

  • użyj metodyduffymo opublikowanej wcześniej, która powoduje, że Hibernate automatycznie aktualizuje schemat bazy danych.
  • jeśli tego nie chcesz, możesz użyć hbm2ddl narzędzia z Hibernate Tools (uwaga: link jest do bani, ale najwyraźniej ich Strona główna jest teraz trochę zepsuta). Możesz go użyć do automatycznego generowania skryptów tworzenia bazy danych z encji JPA; istnieją również wtyczki do Mavena i Ant, które wywołują hbm2ddl automatycznie.
EclipseLink (dawniej Oracle TopLink, JPA 2.0 RI) zobacz Używanie rozszerzeń EclipseLink JPA do generowania schematu. W zasadzie jest bardzo podobny do Hibernate, chociaż na pierwszy rzut oka nie widzę niczego, co mogłoby być użyte jako samodzielne narzędzie do tworzenia skryptu DB.

Inne implementacje JPA (BEA/Oracle Kodo, Apache OpenJPA) prawdopodobnie mają swoje własne metody osiągnięcia tego celu.

 8
Author: andri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:17

Spróbuj dodać następujące rzeczy do swojej wytrwałości.xml

Dla Hibernate:

Aby utworzyć:

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

Aby upuścić i utworzyć:

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

Dla Toplink:

Aby utworzyć:

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

Aby upuścić i utworzyć:

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

Dla EclipseLink:

Aby utworzyć:

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

Aby upuścić i utworzyć:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
 16
Author: James McMahon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-15 19:54:43

Kiedy używam Hibernate po prostu dodaję to do mojego pliku konfiguracyjnego:

      <property name="hbm2ddl.auto">update</property>
Zajmuje się wszystkim. Nie jestem pewien, jaki jest odpowiednik dla JPA, ale jest tak mocno pod wpływem Hibernate, że byłbym zaskoczony, gdybyś nie mógł znaleźć czegoś podobnego. Nie jest potrzebne żadne narzędzie. Zwykle uruchamiam prosty test JUnit i baza danych jest dla mnie tworzona.
 6
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 23:08:42

Używam klasy Hibernate org.hibernate.tool.hbm2ddl.SchemaExport i tej małej metody do

Wygeneruj schemat w bazie danych:

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

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

Aby utworzyć DDL w zewnętrznym pliku, użyj tego wywołania do execute.

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

Za złą formę uważa się ustawienie " hibernate.hbm2ddl.auto " do "update", ponieważ automatyczna zmiana bazy produkcyjnej może ją zepsuć. Aby uzyskać wyjaśnienie, zobacz Hibernate hbm2ddl.auto możliwe wartości i co robią?.

 4
Author: Randy Stegbauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:07:46

By maven plugin:

        <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
Author: sendon1982,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-27 12:29:04

DataNucleus ma swój własny program SchemaTool zdolny do generowania schematu dla Ciebie, lub generowania wymaganych instrukcji DDL dla ciebie, aby dostosować się i zastosować samodzielnie.

--Andy (DataNucleus )

 2
Author: DataNucleus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-23 12:31:31

Dodanie do listy Jamesa McMahona:

Dla OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
 2
Author: Arjan Tijms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-28 12:49:30

Antonio Goncalves mówi w swoim blogu o API do generowania schematu.
W JPA 2.1 generateSchema metoda została wprowadzona w tym celu.

Przykład z bloga:

public class Main {
    public static void main(String[] args) {
        Persistence.generateSchema("samplePU", null);
    }
}
 0
Author: cybersoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 15:55:20