2009-06-30 58 views

回答

2

从数据库导出数据,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(); 
    } 
} 

+0

感谢您的回答,是否可以使用persistence.xml? – 2009-06-30 17:45:56

2

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

2

OpenJPA的支持这个功能了。 OpenJPA mapping tool可以创建脚本或创建ddl文件。 ddl应该与其他JPA实现一起工作(尽管每个供应商都有一些怪癖)。

如果您正在使用的OpenJPA作为持久性提供可配置的OpenJPA创建表他们通过将SynchronizeMappings属性persistence.xml中所需要的第一次。

实施例:

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

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

--Andy(DataNucleus