29

我正在尝试使用 hbm2ddl.auto = update 更新现有表。

几个表中有几个列,其中数据库列定义从实体中的声明发生变化。喜欢

@Column(name="mycolumn", nullable=false, length=10)
private Long mycolumn;

'mycolumn' bigint(20) 不为空 默认 0

在 MySQL 中。

为什么 hbm2ddl 不更新这些东西?是否可以强制进行此类更新?我想说 hbm2ddl 删除列的默认值并更改类型的长度。

4

1 回答 1

49

hibernate.hbm2ddl.auto" value="update不会修改现有的表列定义。做了一些测试,我发现:

hibernate.hbm2ddl.auto" value="update将添加一个尚不存在的 db 列。

hibernate.hbm2ddl.auto" value="update不会删除实体中已删除/不再存在的 db 列。

hibernate.hbm2ddl.auto" value="update不会修改已创建的 db 列。

您需要备份表数据,将其删除并重新启动应用程序,以使该表的架构与您的实体重新同步。然后重新加载您的数据。

请参阅:
需要澄清 hibernate.hbm2ddl.auto=update


Hibernate hbm2ddl.auto 可能的值以及它们的作用?

于 2014-10-31T18:55:02.927 回答