2009-04-22 69 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); 
    } 
}