如何从java代码为我的jpa实体创建一个ddl?

我找了一种方法,我可以为我的jpa注释实体创建一个ddl。 我更喜欢纯粹的java方式。

如果可能的话,生成drop语句也会很好。

将数据从数据库导出为sql

使用liquibase opensource项目

LiquiBase是一个开源(LGPL),独立于数据库的库,用于跟踪,管理和应用数据库更改。 它建立在一个简单的前提上:所有数据库更改(结构和数据)都以基于XML的描述方式存储,并检入源代码管理。

为给定的JPA实体生成创建和删除脚本

我们使用此代码生成drop和create语句:只需使用所有实体类构造此类并调用create / 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;

 / **
  *根据JPA / Hibernate注释的SQL Creator for Tables。
  *
  * 使用:
  *
  * {@link #createTablesScript()}创建表creationg脚本
  *
  * {@link #dropTablesScript()}来创建表破坏脚本
  * 
  * /
公共类SqlTableCreator {

     private final AnnotationConfiguration hibernateConfiguration;
    私人最终属性dialectProps;

     public SqlTableCreator(final Collection> entities){

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

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

         hibernateConfiguration = ejb3Configuration.getHibernateConfiguration();
     }

     / **
      *创建SQL脚本以创建所有表。
      * 
      * @return表示SQL脚本的{@link String}。
      * /
     public String createTablesScript(){
         final StringBuilder script = new StringBuilder();

         final String [] creationScript = hibernateConfiguration.generateSchemaCreationScript(方言
                 .getDialect(dialectProps));
         for(final String string:creationScript){
             script.append(字符串).append( “; \ n”);
         }
         script.append( “\ NGO \ n \ n”);

         return script.toString();
     }

     / **
      *创建SQL脚本以删除所有表。
      * 
      * @return表示SQL脚本的{@link String}。
      * /
     public String dropTablesScript(){
         final StringBuilder script = new StringBuilder();

         final String [] creationScript = hibernateConfiguration.generateDropSchemaScript(方言
                 .getDialect(dialectProps));
         for(final String string:creationScript){
             script.append(字符串).append( “; \ n”);
         }
         script.append( “\ NGO \ n \ n”);

         return script.toString();
     }
 }

DataNucleus具有可以从java或命令行调用的SchemaTool。 它做你需要的

–Andy( DataNucleus )

Hibernate内置了对此的支持。 请参阅org.hibernate.tool.hbm2ddl.SchemaExport

OpenJPA也支持这一点。 OpenJPA 映射工具可以创建脚本或创建ddl文件。 ddl应该与其他JPA实现一起使用(尽管每个供应商都有一些怪癖)。

如果您使用OpenJPA作为持久性提供程序,则可以将OpenJPA配置为在第一次需要时通过将SynchronizeMappings属性添加到persistence.xml来创建表。

示例:

       

以下是如何使用hibernate SchemaExport类来完成您想要的操作的解释。

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

希望这可以帮助。