(转)对The method createBlob() is undefined for the type Hibernate异常的解决办法

REFS:http://blog.csdn.net/zjwlyl/article/details/51323052

 

项目中经常用到上传图片,上传后有两种保存方式:一种是以二进制流的形式保存到数据库中,数据库中的字段名定义为image;第二种是将图片保存到服务器上的某一文件夹下

,然后在数据库里存储一列该图片的保存路径。

对于第一种hibernate4之前的版本的处理方式是这样的,将实体中图片字段定义为Blob类型的,数据库中映射成image类型的,然后往实体中写入的时候如下:

[java]  view plain  copy
 
  1. FileInputStream inputStream = new FileInputStream(file);  
  2. Blob blob = Hibernate.createBlob(inputStream);  
  3. cardInfo.setPhotoFile(blob);  

但是当项目升级到hibernate4之后,因为hibernate4已经弃用了createClob和createBlob,所以如果仍然用上面的方式就会报题目中出现的错误,即“The method createBlob() is undefined for the type Hibernate”,如何解决这一问题呢,我们可以通过spring提供的基础工具类fileCopyUtils来解决这个问题,简单实用。spring对这个类的定义是这样的

 

 

Simple utility methods for file and stream copying.All copy methods use a block size of 4096 bytes,and close all affected streams when done.

Mainly for use within the framework,but also useful for application code.

我们通过 FileCopyUtils 的 copyToByteArray(File in) 方法就可以直接将文件内容读到一个 byte[] 中;另一个可用的方法是 copyToByteArray(InputStream in),它将输入流读取到一个 byte[] 中。废话少说,直接上解决方法:

首先是将实体中图片字段定义为二进制一维数组,如:private byte[] photoFile,该字段在数据库中映射的字段类型仍然是image类型的,然后你就可以轻松地通过下面这句话实现将图片文件写入到实体里了:

 

[java]  view plain  copy
 
  1. byte[] fileArray = org.springframework.util.FileCopyUtils.copyToByteArray(file);  
  2. cardInfo.setPhotoFile(fileArray);  

猜你喜欢

转载自cainiao1923.iteye.com/blog/2356543
今日推荐