题
<property name="hibernate.hbm2ddl.auto">update</property>
我可以创建数据库架构,它会自动添加属性,约束,键等...但是更新数据库架构呢?如果我从我的实体中删除了一些属性,则Hibernate不会将其删除,或者我更改了一些约束,Hibernate不会触摸已经创建的约束...
因此,有一种方法可以使Hibernate真正更新数据库模式吗?
谢谢。
解决方案
我们为自己创建了一个工具,该工具创建了必要的数据库列和表格,并将这些滴剂添加到为数据库更新生成的SQL。但是我们不得不在架构杜比的一代中添加一些额外的功能才能使其正常工作:
- 我们必须添加有关非零件属性的支票。这包括在可能的情况下发布有关数据的更新语句以驱逐nulls,从而导致默认值的下一个点。
- 我们必须添加检查列默认值的支票。默认值是通过列及其数据类型的可取性来推断的。原语总是初始化为零或错误的,其第一个枚举值的枚举,但对于其他对象,必须手动修改脚本。
- 我们甚至增加了对调整Varchar列大小的支持,因为在某些情况下,数据库列长度和
@Column(length)
不同。
但是,将所有内容总结在一起,不能以这种方式创建一个完整的工具,因为如果列以代码重命名,该怎么办?如果类型以某种方式不自动转换(迄今为止的布尔)变化怎么办?如果您无法访问重构历史记录,则不能总是传播更改。
不隶属于 StackOverflow