使用休眠状态更新数据库架构

2022-09-04 19:26:28
<property name="hibernate.hbm2ddl.auto">update</property>

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

那么,有一种方法可以使休眠真正更新数据库架构吗?

谢谢。


答案 1

我们为自己创建了一个工具,用于创建必要的数据库列和表下拉列表,并将这些删除添加到为数据库更新生成的 SQL 中。但是我们必须向 SchemaUpdate 生成添加一些额外的功能才能使其正常工作:

  • 我们必须添加对非空属性的检查。这包括对数据发出 UPDATE 语句以在可能的情况下消除 null,从而得出下一个默认值点。
  • 我们必须添加对列的默认值的检查。默认值由列的可空性及其数据类型推断。基元始终初始化为其第一个枚举值的零或假,非空枚举,但对于其他对象,脚本必须手动修改。
  • 我们甚至添加了对调整 varchar 列大小的支持,因为在某些情况下,数据库列的长度和不同。@Column(length)

但是要把它们放在一起,不能以这种方式创建一个完整的工具,因为如果在代码中重命名一列怎么办?如果类型以无法自动转换的方式更改(迄今为止布尔?)该怎么办?如果无权访问重构历史记录,则无法始终传播更改。


答案 2

hbm2ddl 并不意味着对模式迁移进行全面管理。最好仅将其用于对架构的累加更改,并手动编辑(生成的脚本)以进行其他任何操作。


推荐