从Hibernate 4迁移到5

伯纳德·德罗姆

我尝试迁移到使用Hibernate 5的Spring Boot 1.4。我有一些MariaDB数据库的备份脚本,其中包括表创建。

由于Spring Boot中的spring-data-jpa,我的实体正在使用以下id生成策略。

@GeneratedValue(strategy = GenerationType.AUTO)

在我application.properties我有

spring.jpa.generate-ddl=true
spring.jpa.hibernate.use-new-id-generator-mappings=false

Hibernate团队通常不建议使用此设置(错误值)。

如果我让休眠生成表,似乎与备份脚本中的表有些不同。

如果我对生成器使用假值并使用备份脚本,然后将其设置为true,则会遇到有关Oreign Key的问题

无法添加或更新子行:外键约束失败...

如果我保持为假,我将得到相同的结果。

我可以使用什么策略迁移到Hibernate 5的新生成器并拥有旧数据库(而不是结构)的数据?

有没有办法保持更通用?不特定于休眠

优点

您面临的问题是在Hibernate 4和更低版本中,使用GenerationType.AUTO表示如果您将数据库连接到受支持的IDENTITYAUTO_INCREMENT数据类型,则与使用基于表的序列相比,这些数据库将是首选。

使用Hibernate 5时,GenerationType.AUTO将默认为以前使用IDENTITY或的数据库使用基于表的序列AUTO_INCREMENT逻辑更改的原因有点复杂,但足以说有更好的选择。

我的建议是采用多步骤迁移路径,因为这将很繁琐,具体取决于表的大小和数量以及实体之间的关系。

  1. 首先,不要使用新的标识符映射生成器(例如use false)。
  2. 验证一切正常,又称现状。
  3. 更改所有@GeneratedValue注释以使用GenerationType.IDENTITY
  4. 更改为使用标识符映射生成器(例如use true)。
  5. 验证一切正常,又称现状。

在这一点上,您无需更改数据库中的任何内容,它像从备份中一样保留了宝贵的时间。您所做的全部工作就是迁移了Java代码,以便对于新实体,您可以使用新的标识符映射并为现有实体保留旧的方式。

从现在开始,我建议一次迁移一个实体。

  1. 更改java类以使用hibernate_sequences支持的命名序列生成器
  2. 确定实体数据MAX(ID)并在hibernate_sequences表中为该实体的命名标识符设置适当的下一个ID值
  3. 这里乏味的部分是,您需要删除与该实体的现有ID相关的所有外键,更改其数据类型,以使其不是AUTO_INCREMENTIDENTITY而是最有可能类似于BIGINTINT然后,您想放回外键约束。

此时,该实体应开始使用序列表的逻辑,而不是使用Hibernate 5之前的本机AUTO_INCREMENTIDENTITY功能AUTO

对于大型,复杂的系统,这不会很有趣。

我必须评估我们是否为过去的项目适应了ORM5中的新标识符,并且我们确定适应一个复杂的现有模式所花费的时间是不值得的。我们结束了前1-5步以保持现状,然后允许新实体利用新事物。该计划是供开发人员根据需要在一段时间后返回并完成最后的1-3个步骤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

迁移到Hibernate 5.x

来自分类Dev

迁移到Hibernate 5.x

来自分类Dev

从Hibernate 3迁移到Hibernate 5:sessionFactory(MetadataImplementor)为null

来自分类Dev

从Hibernate 3迁移到4会减慢启动速度

来自分类Dev

将Hibernate 3迁移到5:不存在hibernate_sequence关系

来自分类Dev

将Spring 3迁移到Spring 4并升级到Hibernate 4

来自分类Dev

从Hibernate 3 / Grails 2.2.4迁移到Hiberate 5 / Grails 3.2.4时,MappingException

来自分类Dev

从Hibernate 3迁移到4后,SQL别名不再起作用

来自分类Dev

Hibernate 4-> 5迁移:NamingStrategy更改,未找到表

来自分类Dev

使用Hibernate将JBoss as7迁移到WildFly

来自分类Dev

如何将Hibernate从MySQL迁移到SQL Server?

来自分类Dev

如何将Spring Hibernate MySQL迁移到MongoDB

来自分类Dev

Hibernate HT_临时表ON JOINED继承,从Hibernate 3.4.0.GA迁移到5.1

来自分类Dev

从extJS 4迁移到extJS 5:属性未定义

来自分类Dev

如何将仓库数据从Alfresco 4迁移到5?

来自分类Dev

从extJS 4迁移到extJS 5:属性未定义

来自分类Dev

将仪表板从Kibana 4迁移到Kibana 5

来自分类Dev

使用Hibernate + DataSource将应用程序从Tomcat 7迁移到Weblogic 12

来自分类Dev

如何将基于Spring注释的Hibernate代码迁移到Java EE

来自分类Dev

Hibernate Envers 4.3迁移到5.0-有条件的envers审核

来自分类Dev

Hibernate Envers 4.3迁移到5.0-有条件的envers审核

来自分类Dev

迁移后,hibernate 4出现性能问题

来自分类Dev

迁移到微型MCE 5

来自分类Dev

迁移到Spring MVC 4

来自分类Dev

从Spring 2.5迁移到4

来自分类Dev

如何使用Spring 4配置Hibernate 5

来自分类Dev

集成Spring MVC 4和Hibernate 5

来自分类Dev

Hibernate 5 中的 StatelessSessionImpl

来自分类Dev

Hibernate 4模式更新

Related 相关文章

热门标签

归档