为什么用hibernate存储blob变量(SerialBlob)后字节会变大?

    我在使用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后可获得原始的长度?

    }

 

哪位大虾知道这个问题的原因所在,谢谢赐教。

你可能感兴趣的:(Hibernate)