<property name="hibernate.hbm2ddl.auto">update</property>
我可以创建我的数据库模式,它会自动添加属性,约束,键等... 但是UPDATE数据库架构呢? 如果我从我的实体中删除一些属性,hibernate不会删除它,或者如果我更改了一些约束,则hibernate不会触及已经创建的约束...
那么,有一种方法可以让hibernate真正更新数据库模式吗?
感谢。
答案 0 :(得分:7)
我们为自己创建了一个工具,它创建了必要的数据库列和表,并将这些删除添加到为数据库更新生成的SQL中。但我们必须在SchemaUpdate生成中添加一些额外内容才能使其正常工作:
@Column(length)
不同。但是要把它们放在一起,就不能用这种方式创建一个完整的工具,因为如果在代码中重命名了一个列呢?如果类型以不可自动转换的方式更改(bool到日期?),该怎么办?如果您无权访问重构历史记录,则无法始终传播更改。
答案 1 :(得分:5)
我们目前使用liquibase以数据库无关的方式进行自动数据库更改。可以直接从你的hibernate注释中提取liquibase命令,但我不认为这样的工具存在,所以你可能不得不自己做。
答案 2 :(得分:3)
不,没有。 hbm2ddl并不是要对模式迁移进行全面管理。最好只将它用于模式的附加更改,并手动编辑(生成的脚本)以用于其他任何操作。
答案 3 :(得分:2)
一些可能对管理架构更改有用的项目:
您可以找到的另一个有用的资源是Flyway网站上的feature comparison(还有其他相关项目)。
答案 4 :(得分:1)
Hibernate提供了一个名为SchemaUpdate的类,它可以将一组hibernate映射与数据库模式同步
Old post,但让社区知道它是否有用:)