Hibernate - hibernate.hbm2ddl.auto = validate

2022-09-02 21:25:04

我对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 Community Documentation(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html)实际上只是引用了这些值。

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


答案 1

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

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

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

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

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


答案 2

推荐