18

我对 hibernate.hbm2ddl.auto=validate 的实际工作方式很感兴趣,我正在努力寻找全面的文档。

我们最近发现生产系统受到http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532的影响(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 的任何真实生活经验?

4

1 回答 1

24

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

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

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

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

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

于 2010-04-23T04:18:01.277 回答