20

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

有任何想法吗?

4

8 回答 8

17

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

对于休眠:

创造:

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

要删除和创建:

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

对于顶联:

创造:

<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"/>
于 2009-05-15T19:47:34.373 回答
8

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

对于Hibernate,有几种可能性:

  • 使用前面发布的duffymo方法,使 Hibernate 自动更新数据库模式。
  • 如果你不想这样,你可以使用Hibernate Tools的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)可能有自己的特定方法来实现这一点。

于 2009-04-22T23:31:10.590 回答
6

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

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

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

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

于 2009-04-22T23:08:42.997 回答
6

通过 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>
于 2013-08-27T12:29:04.010 回答
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”设置为“update”被认为是错误的形式,因为自动更改生产数据库可能会破坏它。有关解释,请参阅Hibernate hbm2ddl.auto 可能的值及其作用?.

于 2012-04-28T18:24:52.393 回答
2

DataNucleus有自己的 SchemaTool 能够为您生成架构,或者生成所需的 DDL 语句供您自己适应和应用。

——安迪(数据

于 2009-04-23T12:31:31.913 回答
2

添加到詹姆斯麦克马洪的名单:

对于 OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
于 2012-04-28T12:49:30.447 回答
0

Antonio Goncalves 在他的博客中谈到了生成模式的 API。
在 JPA 2.1中,为此目的引入了generateSchema方法。

来自博客的示例:

public class Main {
    public static void main(String[] args) {
        Persistence.generateSchema("samplePU", null);
    }
}
于 2015-09-29T15:55:20.680 回答