BFILE 유형으로 Oracle 테이블에 파일을 업로드하는 화면에서 작업 중입니다. 나는 spring3과 hibernate3을 사용하고있다.java.lang.ClassCastException : CommonsMultipartFile을 oracle.sql.BFILE로 캐스팅 할 수 없음
처럼 BO 클래스보기 : 나는 BFILE 유저 유형을 정의
@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;
}
}
: 나는 컨트롤러 setFile에 노력하고 때
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);
}
}
문제입니다
manual.setGuide ((oracle.sql.BFILE) form.getFile());
이 아니라 컴파일하지만 화면에서 파일을 업로드 할 때 다음과 같은 예외를
java.lang.ClassCastException가을주고있다 : org.springframework.web.multipart.commons합니다. CommonsMultipartFile을 oracle.sql로 캐스팅 할 수 없습니다. BFILE
어떻게 해결할 수 있습니까?
는 해결 :
내가 시도 :
공공 무효 nullSafeSet (PreparedStatement의 일, 개체 값 INT 지수) HibernateException이,되는 SQLException { 경우 (값 == null이)를 던졌습니다 { st.setObject (인덱스 , 없는); } else {
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);
}
}
및 그 잘 동작합니다.
감사합니다.
BFILE이 실제로 여기에있는 것이 확실합니까? 일반적으로 BFILE 열은 물리적으로 데이터베이스 서버 (또는 데이터베이스 서버에 액세스 할 수있는 공유/파일 시스템)에있는 파일로 채워집니다.보다 일반적인 방법은 BLOB 열을 사용하여 이러한 방식으로 수신 된 파일을 저장하는 것입니다. – pap