我对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)实际上只是引用了这些值。
有没有人有任何好的文档说明,或者在生产系统中使用validate的任何现实生活经验?
我担心这会遇到相同的问题,并且我有兴趣查找有关此验证实际工作方式的更多文档。
在我看来,最好的文档是源代码,您可以检查该源代码以确切地了解正在发生的事情。相关方法是org.hibernate.tool.hbm2ddl.SchemaValidator#validate()。
org.hibernate.tool.hbm2ddl.SchemaValidator#validate()
我快速浏览了代码,但 我 认为SchemaValidator验证 数据库中的 外键不是:它检查表,列,id生成器的存在,但不检查外键。针对pet数据库的测试似乎证实了此行为:删除FK约束不会破坏架构验证(换句话说,验证器检查应用程序是否可以运行,而不是为了参照完整性)。
SchemaValidator
现在,HHH-3532被标记为固定,为什么不升级到较新版本的Hibernate,或者如果更改Hibernate的版本过于繁琐,为什么不自己为HHH-3532应用补丁?
综上所述, 我 不用hibernate.hbm2ddl.auto=update来更新生产数据库,而是使用更改脚本。但是 我 使用hibernate.hbm2ddl.auto=validate并且对此感到满意。
hibernate.hbm2ddl.auto=update
hibernate.hbm2ddl.auto=validate