一尘不染

休眠-hibernate.hbm2ddl.auto =验证

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)实际上只是引用了这些值。

有没有人有任何好的文档说明,或者在生产系统中使用validate的任何现实生活经验?


阅读 227

收藏
2020-06-20

共1个答案

一尘不染

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

在我看来,最好的文档是源代码,您可以检查该源代码以确切地了解正在发生的事情。相关方法是org.hibernate.tool.hbm2ddl.SchemaValidator#validate()

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

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

综上所述, 不用hibernate.hbm2ddl.auto=update来更新生产数据库,而是使用更改脚本。但是
使用hibernate.hbm2ddl.auto=validate并且对此感到满意。

2020-06-20