如何从Java代码为jpa实体创建ddl?
我寻找一种方法来为我的jpa注释实体创建ddl。我更喜欢纯Java方式。
如果可能的话,最好也生成drop语句。
回答:
使用liquibase开源项目
LiquiBase是一个开源(LGPL),独立于数据库的库,用于跟踪,管理和应用数据库更改。它建立在一个简单的前提下:所有数据库更改(结构和数据)均以基于XML的描述性方式存储并检入源代码管理。
我们使用以下代码生成drop和create语句:只需使用所有实体类构造该类,然后调用create / dropTableScript。
如果需要,可以改用persitence.xml和持久性单元名称。只是说些什么,我也会发布代码。
导入java.util.Collection;导入java.util.Properties;
导入org.hibernate.cfg.AnnotationConfiguration;
导入org.hibernate.dialect.Dialect;
导入org.hibernate.ejb.Ejb3Configuration;
/ **
*根据JPA / Hibernate批注的SQL Creator for Tables。
*
* 采用:
*
* {@link #createTablesScript()}创建表创建脚本
*
* {@link #dropTablesScript()}创建表销毁脚本
*
* /
公共类SqlTableCreator {
私有最终的AnnotationConfiguration hibernateConfiguration;
私有的最终Properties DialectProps;
公开SqlTableCreator(最终>实体){
最后的Ejb3Configuration ejb3Configuration = new Ejb3Configuration();
for(最终类别实体:entities){
ejb3Configuration.addAnnotatedClass(entity);
}
DialectProps = new Properties();
DialectProps.put(“ hibernate.dialect”,“ org.hibernate.dialect.SQLServerDialect”);
hibernateConfiguration = ejb3Configuration.getHibernateConfiguration();
}
/ **
*创建SQL脚本以创建所有表。
*
* @return表示SQL脚本的{@link String}。
* /
公共字符串createTablesScript(){
最终的StringBuilder脚本= new StringBuilder();
最后的String [] creationScript = hibernateConfiguration.generateSchemaCreationScript(Dialect
.getDialect(dialectProps));
for(最终字符串字符串:creationScript){
script.append(string).append(“; \ n”);
}
script.append(“ \ ngo \ n \ n”);
返回script.toString();
}
/ **
*创建SQL脚本以删除所有表。
*
* @return表示SQL脚本的{@link String}。
* /
公共字符串dropTablesScript(){
最终的StringBuilder脚本= new StringBuilder();
最后的String [] creationScript = hibernateConfiguration.generateDropSchemaScript(Dialect
.getDialect(dialectProps));
for(最终字符串字符串:creationScript){
script.append(string).append(“; \ n”);
}
script.append(“ \ ngo \ n \ n”);
返回script.toString();
}
}
以上是 如何从Java代码为jpa实体创建ddl? 的全部内容, 来源链接: utcz.com/qa/427761.html