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

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

  1. hbm2dll = update
  2. 纯sql(ddl)脚本。
  3. 第一种选择在上面的主题中被广泛讨论。 第二种选择是坏的,因为这意味着我回到了我的第一个问题:“不想创建依赖于数据库供应商的sql语句”。 (如果“all”(数据库Hibernate支持)正在实现 DDL,则此声明可能为false (用于定义和检查数据库结构的SQL子集。)相等)。

有帮助吗?

解决方案

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

实际上我从不让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=;

其他提示

通常,转储JPA架构的工具基于 SchemaExport 工具,该工具只读取静态元数据。

有一个Maven / Gradle插件 https://github.com/Devskiller/jpa2ddl 生成JPA架构。包括所有属性,命名策略,用户类型等。

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

我喜欢Hibernate(很多),我认为它会产生一些非常好的高质量代码,但是我不会在生产数据库上将它放松,而不是让一个非常有礼貌的灰熊保姆。一段时间内一切都会变得很好,但是一个不好的事件就是真的糟糕。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top