我一直在使用一个实体,例如Foo
,定义为
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String name;
String description;
// etc...
}
而且我已经在数据库中保存了一些数据。
现在出现了需要更长的描述,所以我尝试修改
String description;
到
@Column(columnDefinition = "TEXT")
String description = "";
但是这些更改并没有反映在实际的模式中,我知道即使设置了spring.jpa.hibernate.ddl-auto=update
,jpa hib也不会更新这些更改。
因此,我想要的是保留已经存在的记录,但修改列定义以允许插入具有更长description
字段的新记录。
什么是最好的方法呢?
我已经做了一些调查,并提出了像Flyway这样的解决方案,但我应该以什么样的方式使用它呢?用下面的命令添加一个迁移脚本吗?
ALTER TABLE Foo MODIFY description TEXT;
然后,我是否还应该在Java类中添加@Column(columnDefinition = "TEXT")
?
任何帮助将不胜感激!
1条答案
按热度按时间wooyq4lh1#
我猜底层的数据库是MySQL?什么类型是描述字段目前?因为在MySQL 5.0.3之后的VARCHAR字段可以有多达65.535的字符大小相同的文本. VARCHAR vs TEXT所以你可能甚至不需要改变类型只是字段的最大长度.为此我会使用Flyway,这将确保在代码更改生效的同时应用数据库更改。