我是hibernate世界的新手,我用它来映射存储所有类型文件的表。然而,我收到了一个非常奇怪的错误:
javax.servlet.ServletException: java.lang.ClassCastException: [B cannot be cast to java.sql.Blob
我已将我的MySql LONGBLOB列映射到<property name="fileData" type="blob" .../>
和<property name="fileData" type="longblog" .../>
,但两者都不起作用。
我目前正在使用spring mvc 3.x版本的最新版本和tomcant 7如果有帮助的话。
编辑:这是我的POJO对于fileObject的样子:
package com.kc.models;
public class FileObject {
private String fileName;
private String type;
private double size;
private byte[] file;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getSize() {
return size;
}
public void setSize(double size) {
this.size = size;
}
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
}
}
以下是我的hbm.xml文件的样子:
<class name="com.kc.models.FileObject" table="FILES">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="fileName" type="string" column="FILENAME" />
<property name="type" type="string" column="TYPE" />
<property name="size" type="double" column="SIZE" />
<property name="file" type="blob" column="FILE" />
</class>
O,这是mySql的打印屏幕:http://img412.imageshack.us/img412/3663/fileobject.jpg
答案 0 :(得分:2)
异常消息表明您正在尝试将byte[]
(表示为[B
)投射到java.sql.Blob
:
java.lang.ClassCastException: [B cannot be cast to java.sql.Blob
问题似乎是,当您将POJO属性文件定义为byte[]
时,您将在Hibernate映射中将其映射为`java.sql.Blob'。
尝试更改POJO的属性类型:
package com.kc.models;
public class FileObject {
//...
private java.sql.Blob file;
//...
}
答案 1 :(得分:0)
尝试确保在JaveSE环境(即JUnit测试)和JaveEE环境(例如Glassfish)上运行时出于某些奇怪的原因使用@Access(FIELD)我获得了不同的结果但是当我添加@Access注释时它变得一致
答案 2 :(得分:0)
public Blob getFile() {
return Hibernate.createBlob(file);
}