如何创建为我从Java代码JPA实体DDL?(How can I create a ddl for

2019-07-29 11:11发布

我找办法,我怎么可以创建我的JPA注解实体DDL。 我喜欢这种纯Java的方式。

如果可能的话,将是不错的产生下降的语句了。

Answer 1:

从数据库SQL导出数据

使用liquibase开源项目

LiquiBase是一个开源(LGPL),用于跟踪,管理和应用数据库的改变独立于数据库的库。 它是建立在一个简单的前提:所有数据库的变化(结构和数据)被存储在基于XML的描述性方式和检入源控制。

生成创建和给定的JPA实体下降脚本

我们使用此代码生成下降和创建报表:只需构建这个类的所有实体类,并调用创建/ dropTableScript。

如果需要,你可以使用一个persitence.xml和persitance单位名称代替。 只要你说什么,我职位的代码了。

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



Answer 2:

DataNucleus将具有SchemaTool可以调用从Java,或从命令行。 它您需要什么

--Andy( DataNucleus将 )



Answer 3:

Hibernate的内置了这种支持。 见org.hibernate.tool.hbm2ddl.SchemaExport。



Answer 4:

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>


Answer 5:

这里有一个如何使用Hibernate的SchemaExport类做你想要什么的交代。

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

希望这可以帮助。



文章来源: How can I create a ddl for my jpa entities from java code?