在hibernate中使用longblob

时间:2010-09-13 19:17:04

标签: java hibernate orm

我是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

3 个答案:

答案 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);
}