休眠 - hibernate.hbm2ddl.auto = 验证
Posted
技术标签:
【中文标题】休眠 - hibernate.hbm2ddl.auto = 验证【英文标题】:Hibernate - hibernate.hbm2ddl.auto = validate 【发布时间】:2011-02-11 08:34:59 【问题描述】:我对 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 的任何实际经验?
【问题讨论】:
【参考方案1】:我担心这会遇到同样的问题,我有兴趣查找有关此验证实际工作原理的更多文档。
在我看来,最好的文档是源代码,您可以检查它以了解究竟发生了什么。相关方法为org.hibernate.tool.hbm2ddl.SchemaValidator#validate()
。
我快速浏览了代码,我不认为SchemaValidator
验证数据库中的外键:它检查表、列、 id 生成器,但不是外键。对宠物数据库的测试似乎证实了这种行为:删除 FK 约束不会破坏模式验证(换句话说,验证器检查应用程序是否可以运行,而不是为了参照完整性)。
现在,HHH-3532 被标记为已修复,为什么不升级到更新版本的 Hibernate,或者如果更改 Hibernate 版本太重,为什么不自己为HHH-3532 应用补丁?
话虽如此,我不使用hibernate.hbm2ddl.auto=update
来更新生产数据库,我使用更改脚本。但是我使用hibernate.hbm2ddl.auto=validate
,我很满意。
【讨论】:
谢谢帕斯卡。我不负责生产系统,而且,我不相信几乎足够的回归测试会发生让我对更改版本感到高兴!前几天查看更改控制历史记录,我注意到它最初设置为验证,并且有人将其更新为“更新”。鉴于此,我认为删除它更安全——希望有人不太可能在整行中添加而不是在未来调整一个值!以上是关于休眠 - hibernate.hbm2ddl.auto = 验证的主要内容,如果未能解决你的问题,请参考以下文章