Hibernate hbm2ddl.auto=update 不会更新 MySQL 中的列定义

问题描述 投票:0回答:2

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

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

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

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

在 MySQL 中。

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

hibernate hbm2ddl
2个回答
52
投票

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

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

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

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

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

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


Hibernate hbm2ddl.auto 可能的值及其作用?


0
投票

为此,您可以将 schema.sql 文件添加到资源目录中。当您启动应用程序时,该文件将自动启动。在那里你可以放置你需要使用的sql命令。例如:

alter table my_table
    alter column mycolumn drop default;
© www.soinside.com 2019 - 2024. All rights reserved.