Hibernate-Spring项目部署更新

Hibernate-Spring项目部署更新,hibernate,Hibernate,有人能帮助我如何更新现有的hibernate/Spring应用程序,并将其运行到更新的版本吗 在tomcat中,更改源代码可以覆盖战争。 在Hibernate persistence.xml Hibernate.hbm2ddl.auto=check中,这不会刷新数据库结构,只会检查 我的问题在数据库中。在应用程序的第二个版本中,我得到了更多不同的实体/表结构 如何将现有结构和数据升级到其他结构和数据? 编写SQL脚本,并直接在数据库中执行 在java/hibernate中是否有表升级的方法 谢谢

有人能帮助我如何更新现有的hibernate/Spring应用程序,并将其运行到更新的版本吗

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

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

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

在java/hibernate中是否有表升级的方法

谢谢

验证:验证架构,不更改数据库

更新:更新模式

创建:创建模式,销毁以前的数据

createdrop:在会话结束时删除架构


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


为了正确地进行迁移,您需要使用特殊的数据库迁移工具,如或。您需要设置SpringBean来初始化这些工具中的某些类,并指定SQL脚本的位置,它们将拾取这些SQL文件,并使用尚未存在的SQL文件更新数据库(这样它们就不会重复编写相同的脚本两次)。

或者,如果您不想使用其他工具,如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()) + ";");
}
LocalSessionFactoryBuilder sessionFactory=newlocalsessionfactorybuilder(数据源);
scanPackages(“your.package.containing.entities”);
方言方言=新建mysql5dialent();//选择您的方言
DatabaseMetadata=新的DatabaseMetadata(dataSource.getConnection(),方言,sessionFactory);
List scripts=sessionFactory.generateSchemaUpdateScriptList(方言,元数据);
Formatter Formatter=FormattStyle.DDL.getFormatter();
for(SchemaUpdateScript脚本:脚本){
System.err.println(formatter.format(script.getScript())+“;”;
}

祝你好运!

可能重复感谢,但我知道,我的问题不是这个。非常感谢,flyway对我来说非常好。我可以在maven使用它,或者在春天使用,它看起来非常好。谢谢。