我正在玩一些JPA的东西,更改映射以了解它们应该是什么样的等等。这是基本的实验。但是我找不到一个简单地读取我的实体然后为我生成表模式的工具。我试图在JBoss工具中找到类似的东西,但是nada。 Eclipse集成将是一个巨大的优势,但我将采用命令行工具或ant任务。
有什么想法吗?
答案 0 :(得分:16)
尝试将以下内容添加到persistence.xml
对于Hibernate:
创建:
<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"/>
答案 1 :(得分:8)
我认为使用JPA有一种通用的方法,你必须直接使用底层的JPA实现来实现这一点。
对于 Hibernate ,有几种可能性:
hbm2ddl
。对于 EclipseLink (以前的Oracle TopLink,JPA 2.0 RI),请参阅Using EclipseLink JPA Extensions for Schema Generation。原则上它与Hibernate非常相似,虽然乍一看我没有看到任何可以用作创建数据库脚本的独立实用程序。
其他JPA实现(BEA / Oracle Kodo,Apache OpenJPA)可能有自己特定的实现方法。
答案 2 :(得分:6)
当我使用Hibernate时,我只需将其添加到我的配置文件中:
<property name="hbm2ddl.auto">update</property>
照顾好一切。我不确定JPA的等价物是什么,但它受Hibernate的影响很大,如果你找不到类似的东西,我会感到惊讶。
无需工具。我通常只运行一个简单的JUnit测试,并为我创建数据库。
答案 3 :(得分:5)
通过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>
答案 4 :(得分: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 possible values and what they do?。
答案 5 :(得分:2)
DataNucleus有自己的SchemaTool,能够为您生成架构,或生成所需的DDL语句,供您自行调整和应用。
- 安迪(DataNucleus)
答案 6 :(得分:2)
添加到James McMahon的名单中:
对于OpenJPA:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
答案 7 :(得分:0)
博客示例:
public class Main {
public static void main(String[] args) {
Persistence.generateSchema("samplePU", null);
}
}