5

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

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

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

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

4

4 回答 4

5

在开发/暂存模式下进行所有更改,并手动(或自动,但不要让休眠运行它们)在生产环境中传输和执行脚本。这些脚本可能需要一些调整,因为 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=;
于 2009-05-07T17:27:29.060 回答
3

如何使用 Hibernate 在不丢失数据的情况下更新数据库模式?

于 2009-05-07T17:26:35.850 回答
3

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

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

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

于 2017-10-27T21:56:14.127 回答
1

我喜欢 Hibernate(很多),并且我认为它可以编写一些非常优质的代码,但我不会在生产数据库上将其松散,而是让一只彬彬有礼的灰熊保姆。一切都可以在一段时间内顺利进行,但一旦发生坏事就真的很糟糕。

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

于 2009-05-07T17:35:01.960 回答