<property name="hibernate.hbm2ddl.auto">update</property>

我可以创建数据库架构,它会自动添加属性,约束,键等...但是更新数据库架构呢?如果我从我的实体中删除了一些属性,则Hibernate不会将其删除,或者我更改了一些约束,Hibernate不会触摸已经创建的约束...

因此,有一种方法可以使Hibernate真正更新数据库模式吗?

谢谢。

有帮助吗?

解决方案

我们为自己创建了一个工具,该工具创建了必要的数据库列和表格,并将这些滴剂添加到为数据库更新生成的SQL。但是我们不得不在架构杜比的一代中添加一些额外的功能才能使其正常工作:

  • 我们必须添加有关非零件属性的支票。这包括在可能的情况下发布有关数据的更新语句以驱逐nulls,从而导致默认值的下一个点。
  • 我们必须添加检查列默认值的支票。默认值是通过列及其数据类型的可取性来推断的。原语总是初始化为零或错误的,其第一个枚举值的枚举,但对于其他对象,必须手动修改脚本。
  • 我们甚至增加了对调整Varchar列大小的支持,因为在某些情况下,数据库列长度和 @Column(length) 不同。

但是,将所有内容总结在一起,不能以这种方式创建一个完整的工具,因为如果列以代码重命名,该怎么办?如果类型以某种方式不自动转换(迄今为止的布尔)变化怎么办?如果您无法访问重构历史记录,则不能总是传播更改。

其他提示

我们目前使用 液体 在数据库不可知论中进行自动数据库更改。可能可以直接从您的冬眠注释中提取Liquibase命令,但我认为不存在这样的工具,因此您可能必须自己做。

不,那里没有。 HBM2DDL并不是要对您的模式迁移进行完整的管理。最好仅将其用于模式的加法更改,并为其他任何内容使用手动编辑(生成的脚本)。

一些可能可用于管理模式更改的项目:

  • Mybatis (在母猪上标记的1049个问题)
  • 液体 (在母猪上标记的663个问题)
  • 飞速 (在母猪上标记的400个问题)

您可以找到有用的另一个资源是 功能比较 在Flyway网站上(那里还有其他相关项目)。

Hibernate提供了一个名为Schemaupdate的类,该类能够将一组Hibernate映射与数据库架构同步

旧帖子, ,但是让社区知道它是否很好:)

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