用hibernate存储BLOB为什么字节会变大?

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

    }

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值