Как я могу создать ddl для моих объектов jpa из кода Java?

StackOverflow https://stackoverflow.com/questions/1064943

  •  21-08-2019
  •  | 
  •  

Вопрос

Я ищу способ создать ddl для моих аннотированных объектов jpa.Я предпочитаю для этого чистый Java-способ.

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

Это было полезно?

Решение

Экспорт данных из базы данных в формате sql

Использовать жидкая основа проект с открытым исходным кодом

LiquiBase — это независимая от базы данных библиотека с открытым исходным кодом (LGPL) для отслеживания, управления и применения изменений в базе данных.Он построен на простой предпосылке:Все изменения базы данных (структура и данные) сохраняются в описательном виде на основе XML и проверяются в системе контроля версий.

Создайте сценарий создания и удаления для заданных объектов JPA.

Мы используем этот код для генерации операторов drop и create:Просто создайте этот класс со всеми классами сущностей и вызовите create/dropTableScript.

При необходимости вместо этого вы можете использовать файл persitence.xml и имя единицы сохранения.Просто скажи что -нибудь, и я тоже публикую код.

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();
    }
}

Другие советы

DataNucleus имеет SchemaTool, который можно вызвать из Java или из командной строки.Он делает то, что вам нужно

--Энди (DataNucleus)

В Hibernate есть встроенная поддержка для этого.Видеть org.hibernate.tool.hbm2ddl.SchemaExport.

OpenJPA тоже поддерживает это.OpenJPA картографический инструмент можно создать сценарий или создать файл ddl.ddl должен работать с другими реализациями JPA (хотя у каждого поставщика есть несколько особенностей).

Если вы используете OpenJPA в качестве поставщика сохраняемости, вы можете настроить OpenJPA для создания таблиц при первой необходимости, добавив свойство SynchronizeMappings в файл persistence.xml.

Пример :

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

Вот объяснение того, как использовать класс Hibernate SchemaExport, чтобы делать именно то, что вы хотите.

http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top