我感兴趣的是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)实际上只是引用了值。
是否有人有任何良好的文档指示,或在生产系统中使用验证的任何实际经验?
答案 0 :(得分:23)
我担心这会遇到同样的问题,我有兴趣找到有关此验证实际工作原理的更多文档。
在我看来,最好的文档是你可以检查的源代码,看看究竟发生了什么。相关方法是org.hibernate.tool.hbm2ddl.SchemaValidator#validate()
。
我快速完成了代码并且我认为SchemaValidator
不会验证数据库中的外键 :它会检查表的存在,列,id生成器,但不是外键。针对pet数据库的测试似乎证实了这种行为:删除FK约束不会破坏模式验证(换句话说,验证程序会检查应用程序是否可以运行,而不是参考完整性)。
现在,HHH-3532被标记为已修复,为什么不升级到较新版本的Hibernate,或者如果更改Hibernate的版本太重,为什么不应用{{{ 3}}你自己?
说完所有,我不使用hibernate.hbm2ddl.auto=update
更新生产数据库,我使用更改脚本。但是我使用hibernate.hbm2ddl.auto=validate
并且我很满意。