Hibernate – hibernate.hbm2ddl.auto = validate

我感兴趣的是hibernate.hbm2ddl.auto = validate实际上是如何工作的,我很难找到全面的文档。

我们最近发现生产系统受http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532的影响(Hibernate在名称上匹配外键,而不是签名,所以会为你重新创建它们)和hibernate .hbm2ddl.auto =正在从我们的下一个版本中删除更新。

我很乐意完全摆脱hibernate.hbm2ddl.auto并自己管理我们的数据库。 但是,并非所有同事都分享这个世界观,有些人热衷于加入hibernate.hbm2ddl.auto = validate。

我担心这会遇到同样的问题,我有兴趣找到有关此validation实际如何工作的更多文档。 Hibernate社区文档( http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html )实际上只是引用了这些值。

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

我担心这会遇到同样的问题,我有兴趣找到有关此validation实际如何工作的更多文档。

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

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

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

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