Java Hibernate-Hibernate.hbm2ddl.auto=validate

Java Hibernate-Hibernate.hbm2ddl.auto=validate,java,hibernate,orm,hbm2ddl,Java,Hibernate,Orm,Hbm2ddl,我对hibernate.hbm2ddl.auto=validate的实际工作方式很感兴趣,我正在努力寻找全面的文档 我们最近发现生产系统受到影响(Hibernate在名称上匹配外键,而不是签名,因此将为您重新创建外键),Hibernate.hbm2ddl.auto=update将从下一版本中删除 我很乐意完全摆脱hibernate.hbm2ddl.auto,自己管理数据库。然而,并不是我所有的同事都认同这个世界观,有些人热衷于在hibernate.hbm2ddl.auto=validate中重新

我对hibernate.hbm2ddl.auto=validate的实际工作方式很感兴趣,我正在努力寻找全面的文档

我们最近发现生产系统受到影响(Hibernate在名称上匹配外键,而不是签名,因此将为您重新创建外键),Hibernate.hbm2ddl.auto=update将从下一版本中删除

我很乐意完全摆脱hibernate.hbm2ddl.auto,自己管理数据库。然而,并不是我所有的同事都认同这个世界观,有些人热衷于在hibernate.hbm2ddl.auto=validate中重新添加

我担心这会遇到同样的问题,我想找到更多关于验证工作的文档。Hibernate社区文档()实际上只是引用了这些值

有没有人有很好的文档指南,或者有在生产系统中使用validate的实际经验

我担心这会遇到同样的问题,我想找到更多关于验证工作的文档

在我看来,最好的文档是源代码,您可以通过检查查看到底发生了什么。相关的方法是
org.hibernate.tool.hbm2ddl.SchemaValidator#validate()

我快速浏览了代码,我不认为
SchemaValidator
验证数据库中的外键:它检查表、列、id生成器的存在,但不检查外键。针对pet数据库的测试似乎证实了这一行为:删除FK约束不会破坏模式验证(换句话说,验证器检查应用程序是否可以运行,而不是检查引用完整性)

现在,既然标记为已修复,为什么不升级到更新版本的Hibernate,或者,如果更改Hibernate版本太多,为什么不自己应用补丁呢


综上所述,我不使用
hibernate.hbm2ddl.auto=update
来更新生产数据库,而是使用更改脚本。但是我使用的是hibernate.hbm2ddl.auto=validate,我很满意。

谢谢Pascal。我不负责生产系统,我不相信有足够的回归测试会让我对更改版本感到高兴!前几天查看变更控制历史记录时,我注意到它最初设置为validate,有人将其更新为“udpate”。考虑到这一点,我认为删除它更安全——希望将来有人不太可能添加整行内容,而不是调整某个值!