Hibernate - Spring 项目部署更新

Posted

技术标签:

【中文标题】Hibernate - Spring 项目部署更新【英文标题】:Hibernate - Spring project deploy update 【发布时间】:2012-04-25 10:06:55 【问题描述】:

谁能帮助我如何刷新/更新现有的、正在运行的 hibernate/Spring 应用程序到较新的版本?

要更改源覆盖tomcat中的战争。 在 Hibernate persistence.xml hibernate.hbm2ddl.auto = check - 这不会刷新数据库结构,只检查。

我的问题在数据库中。在应用程序的第二个版本中,我得到了更多不同的实体/表结构。

如何将现有结构和数据升级到另一个? 编写SQL脚本,直接在数据库中执行?

有没有java/hibernate中表升级的方法?

谢谢

【问题讨论】:

Hibernate question hbm2ddl.auto possible values and what they do 的可能重复项 【参考方案1】:

当您使用 Hibernate 时,您可以利用在 update 或 create 中设置的 hbm2ddl,但这并不适用于实际情况,因为 Hibernate 无法按照您的需要更新您的数据库。例如,它可以添加列,但不能删除或重命名,因此它非常有限,并且在现实生活中,当您发布新版本的应用程序时,您可能需要更复杂的案例。

为了正确执行此操作,您需要使用特殊工具进行数据库迁移,例如 flyway 或 liquibase。您需要设置您的 spring bean 以从这些工具初始化某些类并指定您的 SQL 脚本位置,它们将选择那些 SQL 文件并使用尚未存在的那些更新数据库(因此它们不会重新编写相同的脚本两次)。

【讨论】:

非常感谢,flyway 看起来非常适合我。我可以在 maven 中使用它,或者在 spring 中使用它,它看起来非常好。谢谢。【参考方案2】:

https://***.com/a/1689769/106261

validate:验证架构,不对数据库进行任何更改。

更新:更新架构。

create:创建架构,销毁以前的数据。

create-drop:在会话结束时删除架构。

【讨论】:

谢谢,但我知道,我的问题不是这个。【参考方案3】:

或者,如果您不想使用其他工具,例如 flyway 或 liquibase(它们是很棒的工具,顺便说一句),您可以使用以下代码手动生成 Hibernate 将使用 hibernate.hbm2ddl.auto=update 应用的脚本:

LocalSessionFactoryBuilder sessionFactory = new LocalSessionFactoryBuilder(dataSource);
sessionFactory.scanPackages("your.package.containing.entities");
Dialect dialect = new mysql5Dialect(); // select your dialect
DatabaseMetadata metadata = new DatabaseMetadata(dataSource.getConnection(), dialect, sessionFactory);
List<SchemaUpdateScript> scripts = sessionFactory.generateSchemaUpdateScriptList(dialect, metadata);

Formatter formatter = FormatStyle.DDL.getFormatter();
for (SchemaUpdateScript script : scripts) 
   System.err.println(formatter.format(script.getScript()) + ";");

祝你好运!

【讨论】:

以上是关于Hibernate - Spring 项目部署更新的主要内容,如果未能解决你的问题,请参考以下文章

批量更新从更新返回了意外的行数(Spring/Hibernate)

Jenkins部署Spring boot项目失败

使用 spring、hibernate 和 mysql 设置 pom.xml

struts2,spring,hibernate,log4j,quartz 公司使用这些组件和框架开发项目,需要付费吗?

当为 Postgres DB 的属性 spring.jpa.hibernate.ddl-auto 提供更新值时,Hibernate 不会生成序列

Bamboo 在我的 Spring 项目中无法识别测试