gpt4 book ai didi

java.lang.ClassCastException : CommonsMultipartFile cannot be cast to oracle. sql.BFILE

转载 作者:行者123 更新时间:2023-12-02 00:38:22 24 4
gpt4 key购买 nike

我正在一个屏幕上工作,它将文件作为 BFILE 类型上传到 oracle 表。我正在使用 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 userType:

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

}

问题是当我尝试在 Controller 中设置文件时

manual.setGuide((oracle.sql.BFILE) form.getFile());

它编译得很好,但是当我从屏幕上传文件时,它给出了以下异常

java.lang.ClassCastException:org.springframework.web.multipart.commons。CommonsMultipartFile无法转换为oracle.sql。BFILE

如何解决这个问题?

已解决:

我尝试过:

public void nullSafeSet(PreparedStatement st, 对象值, int 索引) 抛出 HibernateException, SQLException { 如果(值==空){ st.setObject(索引, null); }其他{

        OracleConnection oc = (OracleConnection) st.getConnection();
OraclePreparedStatement opst = (OraclePreparedStatement) st;

OracleCallableStatement ocs = (OracleCallableStatement) oc.prepareCall("{? = call BFILENAME('" + directory + "', '"+ filename + "')}");

ocs.registerOutParameter(1, OracleTypes.BFILE);
ocs.execute();
BFILE bfile = ocs.getBFILE(1);
opst.setBFILE(index, bfile);
}
}

并且工作正常。

谢谢!

最佳答案

java.lang.ClassCastException: org.springframework.web.multipart.commons.CommonsMultipartFile cannot be cast to oracle.sql.BFILE

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

这应该是您需要的代码:

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

更新:事实证明这并不那么容易,因为 BFILE 不能仅仅被构造出来。这是 Oracle tutorial for working with BFILES in Java .

关于java.lang.ClassCastException : CommonsMultipartFile cannot be cast to oracle. sql.BFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7107794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com