我正在使用 JPA(Hibernate 的实现)来注释实体类以持久保存到关系数据库(MySQL 或 SQL Server)。有没有一种简单的方法可以从带注释的类自动生成数据库模式(表创建脚本)?
我仍处于原型设计阶段,预计会频繁更改架构。我希望能够从带注释的代码中指定和更改数据模型。 Grails 的相似之处在于它从域类生成数据库。
原文由 Steve Kuo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 JPA(Hibernate 的实现)来注释实体类以持久保存到关系数据库(MySQL 或 SQL Server)。有没有一种简单的方法可以从带注释的类自动生成数据库模式(表创建脚本)?
我仍处于原型设计阶段,预计会频繁更改架构。我希望能够从带注释的代码中指定和更改数据模型。 Grails 的相似之处在于它从域类生成数据库。
原文由 Steve Kuo 发布,翻译遵循 CC BY-SA 4.0 许可协议
为给定的 JPA 实体生成创建和删除脚本
我们使用此代码生成 drop 和 create 语句:只需使用所有实体类构造此类并调用 create/dropTableScript。
如果需要,您可以改用 persitence.xml 和持久性单元名称。只要说些什么,我也发布代码。
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<Class<?>> 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();
}
}
原文由 H2000 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
您可以使用 Hibernate 中的 hbm2ddl 。文档在 这里。