以前我有一个名为Summary的数据库column
名称,其类型为varchar
private String summary;
最近我想将此列数据类型更改为
TEXT
以启用存储大数据。为此,我在lob
中使用了hibernate
注释。@lob
private String summary;
因此,我可以将大量数据存储到该摘要字段中。但是问题是我有一些旧记录,其中摘要字段包含varchar。当获取数据集时,会抛出错误消息
An attempt was made to get a data value of type 'java.sql.Clob' from a data value of type 'VARCHAR'
。所以我的问题是,我是否需要删除旧记录来解决类型不匹配的问题?
可以将旧记录保留为新数据类型吗?
在休眠状态下存储大文本的最佳方法是什么?
如果有人知道,请不要回答。
最佳答案
从字符串迁移到Clob的最简单方法是:
1-添加这样的中间属性@lob private String summaryAux;
并从summary属性中删除@lob
2-使用Java主函数获取所有记录,并将“摘要”设置为“ summaryAux”。
main(){
List<Record> records = getAllRecors();
for(Record record: records){
record.setSummaryAux(record.getSummary());}
saveRecords(records);
}
3-删除
@lob private String summaryAux;
从您的代码中,然后将@lob再次放在
private String summary;
上,并从关联的表,最后重命名summaryAux列=> summary