【问题标题】:How to creata database Schema using Hibernate如何使用 Hibernate 创建数据库模式
【发布时间】:2010-10-24 13:43:29
【问题描述】:

阅读Hibernate: hbm2ddl.auto=update in production? 后出现了一些问题。 首先,我使用 Hibernate 的原因是独立于数据库供应商(无需编写 10 个版本的“相同”sql 查询,例如 tsql 与 sql)。

我的问题出现在创建数据库模式(生产环境)时。据我所知,我有两种选择。

  1. hbm2dll = 更新
  2. 纯 sql (ddl) 脚本。

第一种选择在上面的线程中得到了广泛的讨论。 第二种选择不好,因为这意味着我又回到了我的第一个问题:“不想创建依赖于数据库供应商的 sql 语句”。 (如果“所有”(最后是 Hibernate 支持的数据库)正在实现 DDL(用于定义和检查数据库结构的 SQL 子集。)相等,则此语句可能是错误的)。

【问题讨论】:

    标签: java database hibernate hbm2ddl


    【解决方案1】:
    【解决方案2】:

    在开发/暂存模式下进行所有更改,并在生产环境中手动(或自动,但不要让 hibernate 运行它们)传输和执行脚本。脚本可能需要一些调整,因为 hbm2ddl 更新并未涵盖所有情况。

    事实上,我从来没有让 hibernate 对任何数据库运行 ddl。我使用 hbm2ddl 生成文本:

    org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;
    
    org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;
    

    【讨论】:

    • 打我一拳。完全同意。
    【解决方案3】:

    我喜欢 Hibernate(很多),而且我认为它可以编写一些非常优质的代码,但我不会尽快将它放在生产数据库上,而是让一只彬彬有礼的灰熊保姆。一切都可以在一段时间内变好,但变坏的一个事件是真的很糟糕。

    我的建议是在测试环境中,让休眠生成数据库模式。在测试环境中测试那些。然后将这些脚本带到生产环境并运行它们。注意那里的特殊性;即使测试非常成功,我仍然不会让 Hibernate 在生产服务器上疯狂。获取 Hibernate schemagen 的输出,对其进行测试,并在验证后将其部署到生产服务器。

    【讨论】:

    • 不想在这里对抗,但你读过我的问题吗?
    • 我做到了;我的回答是否以某种特定方式表明对您的问题的误解?
    • 你答案的第一句话。
    • 哦,我明白了。就像我说的,不是想成为敌对的。我将删除第一行。 Thx 关于分享的想法;可悲的是,在 stackoverflow 上不可能(AFAIK),但这是一个不错的想法。
    • 没有难过的感觉,感谢您的帮助。我相信我现在已经下定决心,我只会在开发环境中使用“更新”。并在产品环境中使用“sql脚本”创建数据库
    【解决方案4】:

    转储 JPA 模式的工具通常基于 SchemaExport 工具,该工具仅读取静态元数据。

    有一个 Maven/Gradle 插件 https://github.com/Devskiller/jpa2ddl 可以生成 JPA 模式。 in 包括所有属性、命名策略、用户类型等。

    您还可以使用它为Flyway 生成自动架构迁移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2017-02-11
      • 2021-05-02
      • 2012-09-04
      • 2020-12-08
      • 1970-01-01
      • 2014-06-23
      相关资源
      最近更新 更多