如何使用Hibernate创建数据库架构

时间:2009-05-07 17:21:55

标签: java database hibernate hbm2ddl

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

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

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

4 个答案:

答案 0 :(得分:5)

在开发/暂存模式下进行所有更改,并手动(或自动,但不要让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=;

答案 1 :(得分:3)

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

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

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