以前我有一个名为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

09-08 06:36