我正在尝试使用hbm2ddl.auto = update更新现有表。
在几个表中有几列,其中数据库列定义从实体中的声明变化。像
@Column(name="mycolumn", nullable=false, length=10)
private Long mycolumn;
和
在MySQL中'mycolumn'bigint(20)not null default 0
。
为什么hbm2ddl不更新这样的东西?是否有可能强制进行此类更新? 我想说hbm2ddl删除列的默认值并更改类型的长度。
答案 0 :(得分:38)
hibernate.hbm2ddl.auto" value="update
无法修改现有的表列定义。做一些测试我发现:
hibernate.hbm2ddl.auto" value="update
将添加一个尚不存在的db列。
hibernate.hbm2ddl.auto" value="update
不会删除已删除/不再存在于您实体中的数据库列。
hibernate.hbm2ddl.auto" value="update
不会修改已创建的db列。
您需要备份表数据,删除它并重新启动应用程序,以使该表的架构与您的实体同步。然后重新加载您的数据。