1.问题描述
有几个曲线和一些基本信息存放在类似于二位数组或者是表结果的结构里面,为公司自定义的一个类型。然后用blob包一层,存放到数据库中。他们用的c++写的。我读取使用javajpa来读取数据。一方面如果映射成类,blob数据导致无法赋值。另一方面单纯查曲线的blob也是无法解析,用的zstd,但是会报Unknown frame descriptor。
2.代码
c++方面
void SaveQualityCurve( Database &dba )
{
LocationResult loc;
if (loc.Open("FDH") == false)
{
ALARM( AL_INFO, 5003, true, "打开测量位置'FDH'错误" );
return;
}
int cycles = loc.MeasVal[0]->cycles;
MeasResult * data = loc.MeasVal[0];
FormatString s;
Records recCurvFM;
for (int i = 0; i < cycles; i++)
{
//将曲线数据用BLOB字段格式存入数据库中
//将曲线存入Records对象中, 可以一次存共x坐标的多条曲线,也可以一条曲线存一个Records中
recCurvFM[i]["LOCATION"] = data->Value[i];
recCurvFM[i]["THICKNESS"] = loc[3]->Value[i];
recCurvFM[i]["WIDTH"] = loc[7]->Value[i];
recCurvFM[i]["FINISHING_TEMP"] = loc[6]->Value[i];
//recCurvFM[i]["CROWN"] = loc[6]->Value[i];
//recCurvFM[i]["FLATNESS"] = loc[7]->Value[i];
//recCurvFM[i]["WEDGE"] = loc[9]->Value[i];
}
//CURV_FM 为BLOB字段
_RecordsetPtr rs = dba.OpenRecordset( s("SELECT MATID,CURV_FM FROM TB_QUALITY WHERE MATID= '%s'", loc.MatId) );
if ( rs->adoEOF == VARIANT_TRUE )
{
rs->AddNew(); //添加新记录
rs->PutCollect("MATID", _variant_t(loc.MatId) );
}
rs->GetFields()->GetItem("CURV_FM")->AppendChunk(Blob((void*)recCurvFM.GetDataBuff(), recCurvFM.GetDataSize()) ); //加入BLOB类型的数据
rs->Update();
rs->Close();
ALARM( AL_INFO, 5002, true, "FDH数据成功保存到TB_QUALITY" );
}
2.java代码
@Data
@Entity
@Table(name = "TB_QUALITY")
public class TbQuality {
@Id
private String matid;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name="CURV_FM",columnDefinition = "longBlob")
private byte[] curvFm;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name="CURV_CT",columnDefinition = "longBlob")
private byte[] curvCt;
private java.sql.Date createtime;
}
public static String decompressed(byte[] compressArray){
byte[] array = new byte[(int) Zstd.decompressedSize(compressArray)];
Zstd.decompress(array, compressArray);
return new String(array);
}
private String selectFmCurve(@RequestBody JSONObject object) throws Exception, IOException {
String matId = object.getString("matId");
System.out.println(OTbprimaryDataService.selectFmCurve(matId));
TbQuality o = OTbprimaryDataService.selectFmCurve(matId);
String data = decompressed(o.getCurvCt());
return data;
3.报错提醒
用类接收
No converter found capable of converting from type [java.lang.String] to type [com.tasily.cloud.domain.secondary.TbQuality]
直接查曲线
Unknown frame descriptor。
请问有没有什么思路可以解决这个问题
No converter found capable of converting from type [java.lang.String] to type [com.tasily.cloud.domain.secondary.TbQuality]
类型转换问题,不能将String类型直接转为TbQuality类型。