从JPA实体反向设计DDL

我正在玩一些JPA的东西,改变映射以了解它们应该是什么样的等等。这是基本的实验。 但是我找不到一个简单地读取我的实体然后为我生成表模式的工具。 我试图在JBoss工具中找到类似的东西,但是nada。 Eclipse集成将是一个巨大的优势,但我会采取命令行工具或ant任务。

有任何想法吗?

我不认为使用JPA有一种通用的方法,你必须直接使用底层的JPA实现来实现这一点。

对于Hibernate ,有几种可能性:

  • 使用前面发布的duffymo方法,这使得Hibernate自动更新数据库模式。
  • 如果你不想这样,你可以使用Hibernate Tools中的hbm2ddl 工具 (注意:链接糟透了,但显然他们的主页现在有点破了)。 您可以使用它从JPA实体自动生成数据库创建脚本; 还有Maven和Ant的插件hbm2ddl自动调用hbm2ddl

对于EclipseLink (以前的Oracle TopLink,JPA 2.0 RI),请参阅使用EclipseLink JPA Extensions进行架构生成 。 原则上它与Hibernate非常相似,虽然初看起来我没有看到任何可以用作创建数据库脚本的独立实用程序。

其他JPA实现(BEA / Oracle Kodo,Apache OpenJPA)可能有自己的特定方法来实现这一目标。

尝试将以下内容添加到persistence.xml中

对于Hibernate:

创造:

  

删除并创建:

  

对于Toplink:

创造:

  

删除并创建:

  

对于EclipseLink:

创造:

  

删除并创建:

  

当我使用Hibernate时,我只需将其添加到我的配置文件中:

  update 

照顾好一切。 我不确定JPA的等价物是什么,但它受Hibernate的影响很大,如果你找不到类似的东西,我会感到惊讶。

无需工具。 我通常只运行一个简单的JUnit测试,并为我创建数据库。

我使用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”设置为“update”被认为是不好的forms,因为自动更改生产数据库可能会破坏它。 有关解释,请参阅Hibernate hbm2ddl.auto可能的值以及它们的作用? 。

通过maven插件:

    org.codehaus.mojo hibernate3-maven-plugin 3.0            

DataNucleus有自己的SchemaTool,能够为您生成模式,或生成所需的DDL语句,供您自己调整和应用。

–Andy( DataNucleus )

添加到James McMahon的列表中:

对于OpenJPA:

  

安东尼奥·贡卡尔维斯在他的博客中说,有关生成模式的API。
在JPA 2.1中,为此目的引入了generateSchema方法。

博客示例:

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