2010-04-23 24 views
10

我对hibernate.hbm2ddl.auto = validate的工作原理感兴趣,我正在努力寻找全面的文档。Hibernate - 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)真的只是引用了这些值。

有没有人有任何良好的文档指针,或在生产系统中使用验证的任何实际经验?

回答

17

我担心这会遇到同样的问题,我有兴趣找到更多有关这种验证实际工作的文档。

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

我去迅速通过代码和不认为SchemaValidator验证外键在数据库:它检查表,列,身份证生成器而不是外键的存在。对宠物数据库的测试似乎证实了这种行为:删除FK约束不会中断模式验证(换句话说,验证程序会检查应用程序是否可以运行,而不是用于参照完整性)。

现在,HHH-3532被标记为固定的,你为什么不升级到Hibernate的较新版本,或者,如果改变的Hibernate的版本是太重了,你为什么不应用补丁HHH-3532自己?

说完这一切,不使用hibernate.hbm2ddl.auto=update更新生产数据库,我使用更改脚本。但使用hibernate.hbm2ddl.auto=validate,我很满意。

+0

谢谢帕斯卡。我不负责生产系统,而且,我不相信接近完成的回归测试会让我开心地改变版本! 通过查看变更控制历史,我注意到它最初被设置为验证,并且有人将其更新为'udpate'。鉴于此,我认为将其删除更安全 - 希望有人不太可能增加整条产品线,而不是在将来调整价值! – azp74 2010-04-29 06:07:37

相关问题