从JPA实体反向工程DDL

Gau*_*rav 19 java orm ddl hibernate jpa

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

有任何想法吗?

Jam*_*hon 17

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

对于Hibernate:

创造:

<property name="hibernate.hbm2ddl.auto" value="update"/>
Run Code Online (Sandbox Code Playgroud)

删除并创建:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
Run Code Online (Sandbox Code Playgroud)

对于Toplink:

创造:

<property name="toplink.ddl-generation" value="create-tables"/>
Run Code Online (Sandbox Code Playgroud)

删除并创建:

<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
Run Code Online (Sandbox Code Playgroud)

对于EclipseLink:

创造:

<property name="eclipselink.ddl-generation" value="create-tables"/>
Run Code Online (Sandbox Code Playgroud)

删除并创建:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
Run Code Online (Sandbox Code Playgroud)


and*_*dri 8

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

对于Hibernate,有几种可能性:

  • 使用前面发布的duffymo方法,这使得Hibernate自动更新数据库模式.
  • 如果你不希望出现这种情况,你可以使用就是hbm2ddl从工具的Hibernate工具(注:链接很烂,但显然他们的主页是有点现在打破).您可以使用它从JPA实体自动生成数据库创建脚本; 还有hbm2ddl自动调用的Maven和Ant插件.

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

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


duf*_*ymo 6

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

      <property name="hbm2ddl.auto">update</property>
Run Code Online (Sandbox Code Playgroud)

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

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


sen*_*982 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>
Run Code Online (Sandbox Code Playgroud)