2009-06-30 136 views
6

是否有任何休眠utitliy,我可以使用連接到數據庫。列出所有表格,並生成「創建表格+數據」的sql腳本並保存爲* .sql?生成SQL腳本

回答

7

從數據庫導出數據,SQL

使用liquibase開源項目

LiquiBase是一個開源(LGPL),用於跟蹤,管理和應用數據庫更改數據庫無關的庫。它建立在一個簡單的前提上:所有數據庫更改(結構和數據)都以基於XML的描述性方式進行存儲並簽入源代碼管理。

生成創建和給定的JPA實體

我們使用此代碼生成下降和創建報表下降腳本: 就構建這個類的所有實體類,並調用創建/ dropTableScript。

如果需要,您可以使用persitence.xml和persives單位名稱。只要說一下 ,我也會發布代碼。

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

+2

這需要你有域對象才能轉換爲sql腳本嗎?我想要的是。只需連接到數據庫服務器並列出所有表,並生成創建表腳本。可能? – cometta 2009-07-02 00:57:53