Hibernate - hibernate.hbm2ddl.auto = validate

18
我对hibernate.hbm2ddl.auto=validate的实际工作方式很感兴趣,但我很难找到全面的文档。最近我们发现生产系统受到http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532的影响(Hibernate根据名称而不是签名匹配外键,因此会重新创建它们),并且hibernate.hbm2ddl.auto=update将在我们的下一个版本中被删除。我很乐意完全摆脱hibernate.hbm2ddl.auto并自己管理数据库。然而,并非所有同事都持有这种观点,一些人热衷于重新添加hibernate.hbm2ddl.auto=validate。我担心这会遇到相同的问题,我想找到更多关于验证实际工作方式的文档。Hibernate社区文档(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html)只是提到了这些值。是否有任何好的文档指针或使用验证在生产系统中的实际经验?
1个回答

25

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

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

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

现在,HHH-3532被标记为已修复,为什么不升级到新版本的Hibernate,或者如果更改Hibernate版本太重,为什么不自己应用HHH-3532的补丁呢?

说了这么多,我不使用hibernate.hbm2ddl.auto=update来更新生产数据库,我使用变更脚本。但我使用hibernate.hbm2ddl.auto=validate,我很满意。


1
谢谢Pascal。我不负责生产系统,而且说实话,我并不相信会进行足够的回归测试来让我对更改版本感到满意!前几天查看变更控制历史时,我注意到它最初被设置为验证,有人将其更新为“更新”。鉴于这一点,我认为删除它更安全 - 希望未来有人不太可能添加整行,而是调整值! - azp74

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接