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=update 保留一些表,使用 hbm2ddl.auto=create 重新加载一些表