如何从java代码为我的jpa实体创建一个ddl?
我找了一种方法,我可以为我的jpa注释实体创建一个ddl。 我更喜欢纯粹的java方式。
如果可能的话,生成drop语句也会很好。
将数据从数据库导出为sql
使用liquibase opensource项目
LiquiBase是一个开源(LGPL),独立于数据库的库,用于跟踪,管理和应用数据库更改。 它建立在一个简单的前提上:所有数据库更改(结构和数据)都以基于XML的描述方式存储,并检入源代码管理。
为给定的JPA实体生成创建和删除脚本
我们使用此代码生成drop和create语句:只需使用所有实体类构造此类并调用create / 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; / ** *根据JPA / Hibernate注释的SQL Creator for Tables。 * * 使用: * * {@link #createTablesScript()}创建表creationg脚本 * * {@link #dropTablesScript()}来创建表破坏脚本 * * / 公共类SqlTableCreator { private final AnnotationConfiguration hibernateConfiguration; 私人最终属性dialectProps; public SqlTableCreator(final Collection> entities){ final Ejb3Configuration ejb3Configuration = new Ejb3Configuration(); for(final Class entity:entities){ ejb3Configuration.addAnnotatedClass(实体); } dialectProps = new Properties(); dialectProps.put(“hibernate.dialect”,“org.hibernate.dialect.SQLServerDialect”); hibernateConfiguration = ejb3Configuration.getHibernateConfiguration(); } / ** *创建SQL脚本以创建所有表。 * * @return表示SQL脚本的{@link String}。 * / public String createTablesScript(){ final StringBuilder script = new StringBuilder(); final String [] creationScript = hibernateConfiguration.generateSchemaCreationScript(方言 .getDialect(dialectProps)); for(final String string:creationScript){ script.append(字符串).append( “; \ n”); } script.append( “\ NGO \ n \ n”); return script.toString(); } / ** *创建SQL脚本以删除所有表。 * * @return表示SQL脚本的{@link String}。 * / public String dropTablesScript(){ final StringBuilder script = new StringBuilder(); final String [] creationScript = hibernateConfiguration.generateDropSchemaScript(方言 .getDialect(dialectProps)); for(final String string:creationScript){ script.append(字符串).append( “; \ n”); } script.append( “\ NGO \ n \ n”); return script.toString(); } }
DataNucleus具有可以从java或命令行调用的SchemaTool。 它做你需要的
–Andy( DataNucleus )
Hibernate内置了对此的支持。 请参阅org.hibernate.tool.hbm2ddl.SchemaExport 。
OpenJPA也支持这一点。 OpenJPA 映射工具可以创建脚本或创建ddl文件。 ddl应该与其他JPA实现一起使用(尽管每个供应商都有一些怪癖)。
如果您使用OpenJPA作为持久性提供程序,则可以将OpenJPA配置为在第一次需要时通过将SynchronizeMappings属性添加到persistence.xml来创建表。
示例:
以下是如何使用hibernate SchemaExport类来完成您想要的操作的解释。
http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html
希望这可以帮助。