我想方设法为我的jpa注释实体创建一个ddl。 我更喜欢纯粹的java方式。
如果可能的话,也可以生成drop语句。
答案 0 :(得分:3)
DataNucleus具有可以从java或命令行调用的SchemaTool。它可以满足您的需求
- 安迪(DataNucleus)
答案 1 :(得分:2)
将数据从数据库导出为sql
使用liquibase开源项目
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; /** * 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(); } }
答案 2 :(得分:2)
Hibernate内置了对此的支持。请参阅 org.hibernate.tool.hbm2ddl.SchemaExport 。
答案 3 :(得分:2)
OpenJPA也支持这一点。 OpenJPA mapping tool可以创建脚本或创建ddl文件。 ddl应该与其他JPA实现一起使用(尽管每个供应商都有一些怪癖)。
如果您使用OpenJPA作为持久性提供程序,则可以通过将SynchronizeMappings属性添加到persistence.xml来配置OpenJPA,以便在第一次需要时创建表。
示例:
<persistence-unit name="test">
<!--
. . .
-->
<properties>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
<!--
. . .
-->
</persistence-unit>
答案 4 :(得分:1)
这里有一个关于如何使用hibernate SchemaExport类来完成你想要的内容的解释。
http://jandrewthompson.blogspot.com/2009/10/how-to-generate-ddl-scripts-from.html
希望这有帮助。