Question

Je cherche une façon que je peux créer un ddl pour mes entités JPA annotée. Je préfère une manière pure java pour cela.

Si possible, il serait agréable d'avoir générer les déclarations de chute aussi.

Était-ce utile?

La solution

Exporter des données à partir d'une base de données SQL

Utilisez le projet opensource liquibase

  

LiquiBase est une open source (LGPL), une bibliothèque de base de données indépendante pour le suivi, la gestion et l'application des modifications de base de données. Il est construit sur un principe simple: Toutes les modifications de base de données (structure et données) sont stockés de façon descriptive XML et vérifié dans le contrôle source.

Générer créer et de script drop pour les entités données JPA

Nous utilisons ce code pour générer la chute et de créer des déclarations: Il suffit de construire cette classe avec toutes les classes d'entités et d'appeler créer / dropTableScript.

Si nécessaire, vous pouvez utiliser un nom d'unité persitence.xml et persitance à la place. Dis juste quelquechose et je posterai le code aussi.

import java.util.Collection;
import java.util.Properties;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.dialect.Dialect;
import org.hibernate.ejb.Ejb3Configuration;

/**
 * SQL Creator for Tables according to JPA/Hibernate annotations.
 *
 * Use:
 *
 * {@link #createTablesScript()} To create the table creationg script
 *
 * {@link #dropTablesScript()} to create the table destruction script
 * 
 */
public class SqlTableCreator {

    private final AnnotationConfiguration hibernateConfiguration;
    private final Properties dialectProps;

    public SqlTableCreator(final Collection> entities) {

        final Ejb3Configuration ejb3Configuration = new Ejb3Configuration();
        for (final Class entity : entities) {
            ejb3Configuration.addAnnotatedClass(entity);
        }

        dialectProps = new Properties();
        dialectProps.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");

        hibernateConfiguration = ejb3Configuration.getHibernateConfiguration();
    }

    /**
     * Create the SQL script to create all tables.
     * 
     * @return A {@link String} representing the SQL script.
     */
    public String createTablesScript() {
        final StringBuilder script = new StringBuilder();

        final String[] creationScript = hibernateConfiguration.generateSchemaCreationScript(Dialect
                .getDialect(dialectProps));
        for (final String string : creationScript) {
            script.append(string).append(";\n");
        }
        script.append("\ngo\n\n");

        return script.toString();
    }

    /**
     * Create the SQL script to drop all tables.
     * 
     * @return A {@link String} representing the SQL script.
     */
    public String dropTablesScript() {
        final StringBuilder script = new StringBuilder();

        final String[] creationScript = hibernateConfiguration.generateDropSchemaScript(Dialect
                .getDialect(dialectProps));
        for (final String string : creationScript) {
            script.append(string).append(";\n");
        }
        script.append("\ngo\n\n");

        return script.toString();
    }
}

Autres conseils

DataNucleus a SchemaTool qui peut être appelé à partir de Java, ou à partir de la ligne de commande. Il fait ce que vous avez besoin

- Andy ( DataNucleus )

Mise en veille prolongée a un support intégré pour cela. Voir org.hibernate.tool.hbm2ddl.SchemaExport .

OpenJPA a un support pour cela aussi. Le OpenJPA outil de cartographie peut créer un script ou créer un fichier ddl. Le ddl devrait travailler avec d'autres implémentations JPA (bien que chaque fournisseur a quelques bizarreries de).

Si vous utilisez OpenJPA en tant que fournisseur de persistance, vous pouvez configurer OpenJPA pour créer les tables la première fois qu'ils sont nécessaires en ajoutant la propriété SynchronizeMappings à persistence.xml.

Exemple:

<persistence-unit name="test"> 
    <!--
       . . .
      -->
    <properties>
        <property name="openjpa.jdbc.SynchronizeMappings"
                  value="buildSchema"/>
    </properties>
    <!--
       . . .
      -->
</persistence-unit>

Voici une explication de la façon d'utiliser la classe SchemaExport de mise en veille prolongée pour faire exactement ce que vous voulez.

http: //jandrewthompson.blogspot .com / 2009/10 / how-to-générer-ddl-scripts-from.html

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top