我找办法,我怎么可以创建我的JPA注解实体DDL。 我喜欢这种纯Java的方式。
如果可能的话,将是不错的产生下降的语句了。
我找办法,我怎么可以创建我的JPA注解实体DDL。 我喜欢这种纯Java的方式。
如果可能的话,将是不错的产生下降的语句了。
从数据库SQL导出数据
使用liquibase开源项目
LiquiBase是一个开源(LGPL),用于跟踪,管理和应用数据库的改变独立于数据库的库。 它是建立在一个简单的前提:所有数据库的变化(结构和数据)被存储在基于XML的描述性方式和检入源控制。
生成创建和给定的JPA实体下降脚本
我们使用此代码生成下降和创建报表:只需构建这个类的所有实体类,并调用创建/ dropTableScript。
如果需要,你可以使用一个persitence.xml和persitance单位名称代替。 只要你说什么,我职位的代码了。
import java.util.Collection; import java.util.Properties; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.dialect.Dialect; import org.hibernate.ejb.Ejb3Configuration; /** * SQL Creator for Tables according to JPA/Hibernate annotations. * * Use: * * {@link #createTablesScript()} To create the table creationg script * * {@link #dropTablesScript()} to create the table destruction script * */ public class SqlTableCreator { private final AnnotationConfiguration hibernateConfiguration; private final Properties dialectProps; public SqlTableCreator(final Collection> entities) { final Ejb3Configuration ejb3Configuration = new Ejb3Configuration(); for (final Class entity : entities) { ejb3Configuration.addAnnotatedClass(entity); } dialectProps = new Properties(); dialectProps.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect"); hibernateConfiguration = ejb3Configuration.getHibernateConfiguration(); } /** * Create the SQL script to create all tables. * * @return A {@link String} representing the SQL script. */ public String createTablesScript() { final StringBuilder script = new StringBuilder(); final String[] creationScript = hibernateConfiguration.generateSchemaCreationScript(Dialect .getDialect(dialectProps)); for (final String string : creationScript) { script.append(string).append(";\n"); } script.append("\ngo\n\n"); return script.toString(); } /** * Create the SQL script to drop all tables. * * @return A {@link String} representing the SQL script. */ public String dropTablesScript() { final StringBuilder script = new StringBuilder(); final String[] creationScript = hibernateConfiguration.generateDropSchemaScript(Dialect .getDialect(dialectProps)); for (final String string : creationScript) { script.append(string).append(";\n"); } script.append("\ngo\n\n"); return script.toString(); } }
DataNucleus将具有SchemaTool可以调用从Java,或从命令行。 它您需要什么
--Andy( DataNucleus将 )
Hibernate的内置了这种支持。 见org.hibernate.tool.hbm2ddl.SchemaExport。
OpenJPA的支持这个功能了。 OpenJPA的映射工具,可以创建一个脚本,或者创建一个DDL文件。 该DDL应与其他JPA实现(尽管每个供应商都有一些怪癖)工作。
如果您使用的OpenJPA作为持久性提供可配置的OpenJPA创建表他们通过将SynchronizeMappings属性persistence.xml中所需要的第一次。
例如:
<persistence-unit name="test">
<!--
. . .
-->
<properties>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
<!--
. . .
-->
</persistence-unit>
这里有一个如何使用Hibernate的SchemaExport类做你想要什么的交代。
http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html
希望这可以帮助。