Java 来自JPA实体的逆向工程DDL
我在玩一些JPA的东西,改变映射,看看它们应该是什么样子,等等。这是基本的实验。然而,我找不到一个工具,它可以简单地读取我的实体,然后为我生成表模式。我试图在JBoss工具中找到类似的东西,但没有找到。Eclipse集成将是一个巨大的优势,但我将使用命令行工具或ant任务Java 来自JPA实体的逆向工程DDL,java,hibernate,orm,jpa,ddl,Java,Hibernate,Orm,Jpa,Ddl,我在玩一些JPA的东西,改变映射,看看它们应该是什么样子,等等。这是基本的实验。然而,我找不到一个工具,它可以简单地读取我的实体,然后为我生成表模式。我试图在JBoss工具中找到类似的东西,但没有找到。Eclipse集成将是一个巨大的优势,但我将使用命令行工具或ant任务 有什么想法吗?当我使用Hibernate时,我只需将其添加到配置文件中: <property name="hbm2ddl.auto">update</property> 更新 照顾一切。
有什么想法吗?当我使用Hibernate时,我只需将其添加到配置文件中:
<property name="hbm2ddl.auto">update</property>
更新
照顾一切。我不确定JPA的等价物是什么,但它受Hibernate的影响太大了,如果你找不到类似的东西,我会感到惊讶
不需要工具。我通常只运行一个简单的JUnit测试,然后为我创建数据库。我认为没有一种通用的JPA测试方法,您必须直接使用底层的JPA实现来实现这一点 对于休眠,有几种可能性:
- 使用前面发布的方法,使Hibernate自动更新数据库模式
- 如果您不想这样做,您可以使用来自的hbm2ddl工具(注意:链接很糟糕,但显然他们的主页现在有点破损)。您可以使用它从JPA实体自动生成数据库创建脚本;Maven和Ant的插件也可以自动调用
hbm2ddl
--Andy()尝试将以下内容添加到persistence.xml中 对于休眠:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
要创建:
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="toplink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
要删除并创建:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
对于Toplink:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
要创建:
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="toplink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
要删除并创建:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
日食:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
要创建:
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="toplink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
要删除并创建:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
詹姆斯·麦克马洪的名单中增加了: 对于OpenJPA:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
我使用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,请使用此调用执行
new SchemaExport(configuration)
.setHaltOnError(true)
.setOutputFile(outputFile)
.setImportFile("")
.setDelimiter(";")
.setFormat(true)
.execute(false, false, false, true);
将“hibernate.hbm2ddl.auto”设置为“update”被认为是不好的形式,因为自动更改生产数据库可能会破坏它。有关说明,请参阅.maven plugin提供的:
<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>
org.codehaus.mojo
hibernate3 maven插件
3
Antonio Goncalves在他的about API中说要生成模式。在JPA2.1中,为此目的引入了方法 博客中的示例:
public class Main {
public static void main(String[] args) {
Persistence.generateSchema("samplePU", null);
}
}