ber*_*mme 5 hibernate mariadb spring-data-jpa spring-boot
我尝试迁移到使用Hibernate 5的Spring Boot 1.4.我有一些包含表创建的MariaDB数据库的备份脚本.
由于Spring Boot中的spring-data-jpa,我的实体正在使用以下id生成策略.
@GeneratedValue(strategy = GenerationType.AUTO)
Run Code Online (Sandbox Code Playgroud)
在我的application.properties我
spring.jpa.generate-ddl=true
spring.jpa.hibernate.use-new-id-generator-mappings=false
Run Code Online (Sandbox Code Playgroud)
Hibernate团队通常不建议使用此设置(false值).
如果我让hibernate生成表,看起来与备份脚本中的那个有些不同.
如果我使用关于生成器的假值并使用备份脚本并在此之后设置为true,我会遇到一些关于oreign键的问题
无法添加或更新子行:外键约束失败...
如果我保持虚假,我会得到相同的结果.
我可以使用什么策略迁移到Hibernate 5的新生成器并拥有旧数据库(不是结构)的数据?
有没有办法保持更通用?不是特定于Hibernate
Nar*_*ros 14
您面临的问题是,在Hibernate 4和之前的版本中,使用GenerationType.AUTO暗示如果数据库连接到支持的数据类型IDENTITY或AUTO_INCREMENT数据类型,则优先使用基于表的序列.
与Hibernate 5,GenerationType.AUTO将默认使用基于表的序列以前会使用的数据库IDENTITY或AUTO_INCREMENT.逻辑变化的原因有点复杂,但足以说有更好的选择.
我的建议是一个多步骤的迁移路径,因为这将是繁琐的,具体取决于表的大小和数量以及实体之间的关系.
false).@GeneratedValue要使用的所有注释GenerationType.IDENTITY. true).此时,您不必更改数据库中的任何内容,它与备份保持一致.您所做的就是迁移java代码,以便对于新实体,您可以使用新的标识符映射并保留现有实体的旧方法.
从现在开始,我建议一次迁移一个实体.
hibernate_sequences表支持的命名序列生成器.hibernate_sequences表中为该实体的命名标识符设置适当的下一个id值.AUTO_INCREMENT或者IDENTITY更可能是类似BIGINT或者INT.然后你想要回到外键约束.此时,该实体应该开始使用序列表的逻辑而不是Hibernate 5之前使用的本机AUTO_INCREMENT或IDENTITY功能AUTO.
对于大型复杂系统,这不会很有趣.
我必须评估我们是否在ORM5中为过去的项目调整了新的标识符,我们确定了调整复杂的现有模式所涉及的时间并不值得.我们最终做了前1-5个步骤以保持现状,然后允许新实体利用新的东西.计划是让开发人员回过头来,根据需要随着时间的推移完成最后的1-3个步骤.
| 归档时间: |
|
| 查看次数: |
5711 次 |
| 最近记录: |