代码之家  ›  专栏  ›  技术社区  ›  azp74

hibernate-hibernate.hbm2ddl.auto=验证

  •  14
  • azp74  · 技术社区  · 16 年前

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

    我们最近发现生产系统受到 http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 (hibernate在名称上匹配外键,而不是签名,因此将为您重新创建它们)hibernate.hbm2ddl.auto=update将从下一个版本中删除。

    我很乐意完全摆脱hibernate.hbm2dl.auto,自己管理我们的数据库。然而,并不是所有的同事都认同这个世界观,有些人热衷于在hibernate.hbm2ddl.auto=validate中添加。

    我担心这会遇到同样的问题,我有兴趣找到更多关于验证实际工作原理的文档。hibernate社区文档( http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html )真的只是参考了价值观。

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

    1 回复  |  直到 10 年前
        1
  •  23
  •   m1ld    10 年前

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

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

    我很快查了一遍密码 别以为 SchemaValidator 验证外键 在数据库中 :它检查是否存在表、列、id生成器,但不检查外键。对pet数据库的测试似乎证实了这种行为:删除fk约束不会破坏模式验证(换句话说,验证程序检查应用程序是否可以运行,而不是引用完整性)。

    现在, HHH-3532 被标记为已修复,为什么不升级到新版本的hibernate,或者,如果更改hibernate的版本太重,为什么不应用修补程序 HHH-3532 你自己?

    说到这里, 不要使用 hibernate.hbm2ddl.auto=update 要更新生产数据库,我使用更改脚本。但是 使用 hibernate.hbm2ddl.auto=validate 我对此很满意。