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

Posted

技术标签:

【中文标题】Hibernate hbm2ddl.auto=update 不更新 MySQL 中的列定义【英文标题】:Hibernate hbm2ddl.auto=update doesn't update column definitions in MySQL 【发布时间】:2013-04-05 09:28:05 【问题描述】:

我正在尝试使用 hbm2ddl.auto = update 更新现有表。 多个表中有多个列,其中数据库列定义与实体中的声明不同。喜欢

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

'mycolumn' bigint(20) not null default 0

mysql 中。

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

见:Need clarity on hibernate.hbm2ddl.auto=update

和Hibernate hbm2ddl.auto possible values and what they do?

【讨论】:

以上是关于Hibernate hbm2ddl.auto=update 不更新 MySQL 中的列定义的主要内容,如果未能解决你的问题,请参考以下文章

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto =创建(不创建表)

Hibernate 使用 hbm2ddl.auto=update 保留一些表,使用 hbm2ddl.auto=create 重新加载一些表

Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证