Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:CommonMultipartFile无法转换为oracle.sql.BFILE_Java_Hibernate_Spring - Fatal编程技术网

java.lang.ClassCastException:CommonMultipartFile无法转换为oracle.sql.BFILE

java.lang.ClassCastException:CommonMultipartFile无法转换为oracle.sql.BFILE,java,hibernate,spring,Java,Hibernate,Spring,我正在一个屏幕上工作,该屏幕将上传一个文件到oracle表作为BFILE类型。我正在使用spring3和hibernate3 BO类看起来像: @Entity @Table(name="abc_manuals") public class ManualBo implements Serializable { /* Persistent Fields */ @Id @Column(name="id", nullable=false) @GeneratedValue(strategy=Genera

我正在一个屏幕上工作,该屏幕将上传一个文件到oracle表作为BFILE类型。我正在使用spring3和hibernate3

BO类看起来像:

@Entity
@Table(name="abc_manuals")
public class ManualBo implements Serializable {

/* Persistent Fields */
@Id
@Column(name="id", nullable=false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long  mId;


@Column(name="guide")
@Type(type="com.bo.entity.BFILEType")
private BFILE guide;


public Long getMlId() {
    return mlId;
}
public void setMId(Long manualId) {
    this.mId = mId;
}

public BFILE getGuide() {
    return guide;
}
public void setGuide(BFILE guide) {
    guide = guide;
}

}
我定义了一个BFILE用户类型:

public class BFILEType implements UserType, Serializable {

@SuppressWarnings("unused")
private static final String MARK_EMPTY = "<EmptyString/>";
private static final int[] TYPES = { OracleTypes.BFILE  };

public int[] sqlTypes() {
    return TYPES;
}

@SuppressWarnings("rawtypes")
public Class returnedClass() {
    return BFILE.class;
}

public boolean equals(Object x, Object y) {
    if (x==y) return true;
    if (x==null || y==null) return false;
    return x.equals(y);
}

public Object deepCopy(Object x) {
    return x;
}

public boolean isMutable() { return false; }

   public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws 
   HibernateException, SQLException {
    BFILE bfile = (BFILE)rs.getObject(names[0]);
    return bfile;
}

public void nullSafeSet(PreparedStatement st, Object value, int index) throws 
     HibernateException, SQLException {
    if(value==null)
        st.setObject(index, null);
    else
        st.setObject(index, value, OracleTypes.BFILE);
}

public Object assemble(Serializable arg0, Object arg1) throws HibernateException {
    return deepCopy(arg0);
}

public Serializable disassemble(Object value) {
    return (Serializable) deepCopy(value);
}

public int hashCode(Object arg0) throws HibernateException {
    return arg0.hashCode();
}

public Object replace(Object arg0, Object arg1, Object arg2) throws
     HibernateException {
    return deepCopy(arg0);
}
它工作得很好


谢谢

CommonsMultipartFile表示多部分表单请求,即字段的集合。您必须从字段中提取文件,即调用
getFileItem()
getInputStream()
来提取文件内容。

CommonsMultipartFile表示多部分表单请求,即字段集合。您必须从字段中提取文件,即调用
getFileItem()
getInputStream()
来提取文件内容

java.lang.ClassCastException: org.springframework.web.multipart.commons.commons多部分文件不能 转换为oracle.sql.BFILE

这是正确的,这两个类不共享类型层次结构,无法将一个类强制转换为另一个。不要强制转换类型,而应该专注于传输内容

这应该是您需要的代码:

BFILE bfile = new BFILE();
bfile.setBytes(form.getFile().getBytes());
manual.setGuide(bfile);
更新:事实证明这并不是那么容易,因为不能仅仅构造一个BFILE。这是一个例子

java.lang.ClassCastException: org.springframework.web.multipart.commons.commons多部分文件不能 转换为oracle.sql.BFILE

这是正确的,这两个类不共享类型层次结构,无法将一个类强制转换为另一个。不要强制转换类型,而应该专注于传输内容

这应该是您需要的代码:

BFILE bfile = new BFILE();
bfile.setBytes(form.getFile().getBytes());
manual.setGuide(bfile);

更新:事实证明这并不是那么容易,因为不能仅仅构造一个BFILE。这是一个。

你确定你想要的就是这个文件吗?通常,BFILE列由物理上位于数据库服务器(或数据库服务器可访问的共享/文件系统)上的文件填充。更常见的是使用BLOB列来存储以这种方式接收的文件。您确定BFILE就是您在这里所要的吗?通常,BFILE列由物理上位于数据库服务器(或数据库服务器可访问的共享/文件系统)上的文件填充。更常见的是使用BLOB列来存储以这种方式接收的文件。对于MultipartFile类型,getFileItem()方法未定义,因此尝试了第二种方法:manual.setGuide((oracle.sql.BFILE)form.getFile().getInputStream());这是一个错误:类型manualBo中的方法setGuide(BFILE)不适用于参数(InputStream)@Jyoti。同样,InputStream和CommonMultipartFile不共享类型层次结构,因此不可能进行强制转换(我建议您阅读Java教程中的部分)。但是,InputStream是二进制数据的通用交换格式。对于MultipartFile类型,getFileItem()方法未定义,因此尝试了第二种方法:manual.setGuide((oracle.sql.BFILE)form.getFile().getInputStream());这是一个错误:类型manualBo中的方法setGuide(BFILE)不适用于参数(InputStream)@Jyoti。同样,InputStream和CommonMultipartFile不共享类型层次结构,因此不可能进行强制转换(我建议您阅读Java教程中的部分)。不过,InputStream是二进制数据的通用交换格式。谢谢!但是我无法实例化BFILE(BFILE BFILE=new BFILE();)。它给出错误:构造函数BFILE()不可见谢谢!但是我无法实例化BFILE(BFILE BFILE=new BFILE();)。它给出了一个错误:构造函数BFILE()不可见