我在使用hibernate存储 Blob图像时发现这样的问题,图片原始字节是2570,保存到oracle数据库中后,字节变为2717,而使用hql语句获取blob对象后,检查取出的blob字节仍为2570,图像能正常显示,但使用纯sql的方式读取的blob是2717,图像不能正常显示,不知道是什么原因。oracle的 blob类是oracle.sql.BLOB, 程序中的实体类的 BLOB是javax.sql.rowset.serial.SerialBlob类型,难道oracle.sql.BLOB转换为javax.sql.rowset.serial.SerialBlob需要什么特殊的方法?hibernate是怎么处理两者的转换?下面是hibernate配置文件中的blob字段的映射:
<property name="infPhoto" type="javax.sql.rowset.serial.SerialBlob">
<column name="inf_photo" sql-type="BLOB" />
</property>
使用 select infPhoto from CmsInfo where rowId='1' 获取的blob是2570的长度,这个blob能正常显示图片,但使用下面的纯sql来获取blob的长度则是2717(这个长度和oracle数据库中存储的blob长度是相同的):
String sql = "select inf_photo from cms_info where row_id='"+this.imageRowId+"'";
Object obj1 = service.getJdbcTemplate().queryForObject(sql, Blob.class);
if(obj1!=null)
{
Blob b = (Blob)obj1;
logger.info(b.length()); //2717
SerialBlob bb = new SerialBlob(b);
logger.info("转换1:");
logger.info(bb.length()); //转换后还是2717,不知道通过什么方法转换SerialBlob后可获得原始的长度?
}
哪位大虾知道这个问题的原因所在,谢谢赐教。