2009-04-22 33 views
19

我玩弄一些JPA的東西,改變映射,看看他們應該如何等等。這是基本的實驗。然而,我找不到一個只讀取我的實體併爲我生成表格模式的工具。我試圖在JBoss工具中找到類似這樣的東西,但是nada。 Eclipse集成將是一個巨大的優勢,但我會採取命令行工具或ant任務。逆向工程從JPA實體DDL

任何想法?

回答

8

我不認爲有一個通用的方式來做到這一點與JPA,你必須直接使用底層JPA實現來實現這一點。

對於休眠,有幾種可能性:

  • 使用前面張貼的方法duffymo,使Hibernate的自動更新數據庫模式。
  • 如果你不想這樣做,你可以使用的hbm2ddl工具(注意:鏈接很爛,但顯然他們的主頁現在有點壞了)。您可以使用它從JPA實體自動生成數據庫創建腳本;還有Maven和Ant的插件會自動調用hbm2ddl

對於的EclipseLink(以前的Oracle的TopLink中,JPA 2.0 RI)看到Using EclipseLink JPA Extensions for Schema Generation。原則上它與Hibernate非常相似,但乍看之下,我沒有看到任何可用作創建數據庫腳本的獨立實用程序的東西。其他JPA實現(BEA/Oracle Kodo,Apache OpenJPA)可能有其自己的具體方法來實現這一點。

6

當我使用Hibernate我只是將它添加到我的配置文件:

 <property name="hbm2ddl.auto">update</property> 

完成所有的操作。我不確定JPA的等價物是什麼,但它受Hibernate的影響很大,如果你找不到類似的東西,我會感到驚訝。

無需工具。我通常只運行一個簡單的JUnit測試,併爲我創建數據庫。

16

嘗試添加以下到您的持久性。XML

對於休眠:

要創建:

<property name="hibernate.hbm2ddl.auto" value="update"/> 

刪除和創建:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

對於Toplink的:

創建:

<property name="toplink.ddl-generation" value="create-tables"/> 

刪除和創建:

<property name="toplink.ddl-generation" value="drop-and-create-tables"/> 

對於的EclipseLink:

要創建:

<property name="eclipselink.ddl-generation" value="create-tables"/> 

刪除和創建:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
2

添加到詹姆斯·麥克馬洪的列表:

關於OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 
4

我使用Hibernate的org.hibernate.tool.hbm2ddl.SchemaExport類和這個小方法

在數據庫中生成模式:

public static void rebuildSchema() 
{ 
    configuration = new Configuration(); 
    configuration.configure(); 

    new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .execute(false, true, false, false); 
} 

在外部文件中創建DDL,請將此調用用於execute

 new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .setOutputFile(outputFile) 
     .setImportFile("") 
     .setDelimiter(";") 
     .setFormat(true) 
     .execute(false, false, false, true); 

它認爲是不好的形式設置「hibernate.hbm2ddl.auto」「更新」,因爲自動改變生產數據庫可以打破它。有關說明,請參閱Hibernate hbm2ddl.auto possible values and what they do?

4

通過Maven插件:

 <plugin> 
      <!-- run "mvn hibernate3:hbm2ddl" to generate a schema --> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>hibernate3-maven-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <hibernatetool> 
        <classpath> 
         <path location="${project.build.directory}/classes" /> 
         <path location="${project.basedir}/src/main/resources/META-INF/" />            
        </classpath> 

        <jpaconfiguration persistenceunit="galleryPersistenceUnit" />      
        <hbm2ddl create="true" export="false" destdir="${project.basedir}/target" drop="true" outputfilename="mysql.sql" format="true" console="true"/> 
       </hibernatetool> 
      </configuration> 
     </plugin> 
0

安東尼奧·貢薩爾維斯說,他blog約API生成的模式英寸
在JPA 2.1 generateSchema方法是爲此目的而引入的。從博客

實施例:

public class Main { 
    public static void main(String[] args) { 
     Persistence.generateSchema("samplePU", null); 
    } 
}