2009-06-30 23 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

相關問題