java.lang.ClassCastException:CommonMultipartFile无法转换为oracle.sql.BFILE
我正在一个屏幕上工作,该屏幕将上传一个文件到oracle表作为BFILE类型。我正在使用spring3和hibernate3 BO类看起来像: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
@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()不可见