Передача объекта Oracle, содержащего Blob, в SimpleJdbcCall
У меня есть объекты Oracle, определенные следующим образом:
create or replace TYPE "FILEIITEM_OBJ" AS OBJECT
(
FILENAME VARCHAR2(100)
,CONTENT BLOB
);
и
create or replace TYPE "FILEITEM_COLL" IS TABLE OF FILEITEM_OBJ;
Мне нужно вызвать процедуру («requestWithBlob») через SimpleJdbcCall, которая принимает FILEITEM_COLL в качестве параметра («fileitem_coll_p»).
Итак, я пробую это:
public class FileInfo {
private String filename;
private Blob content;
// setters and getters
}
и
public String requestWithBlob(List<FileInfo> files) {
// create a SimpleJdbcCall
SimpleJdbcCall call = new SimpleJdbcCall(this.jdbcTemplate).withCatalogName("CATALOG")
.withProcedureName("requestWithBlob").withoutProcedureColumnMetaDataAccess()
.declareParameters(
new SqlParameter("fileitem_coll_p", OracleTypes.ARRAY, "FILEIITEM_COLL"),
// out parameter
}
// create a MapSqlParameterSource
SqlParameterSource source = new MapSqlParameterSource()
.addValue("fileitem_coll_p", fileItems.toArray(FileItem[]::new), OracleTypes.ARRAY, "FILEITEM_COLL");
// execute the call
Map<String, Object> result = call.execute(source);
К сожалению, это возвращается с ошибкой:
java.sql.SQLException: Fail to convert to internal representation: [Lcom.jason.repository.FileItem;@440d1e2f
at oracle.sql.ARRAY.toARRAY(ARRAY.java:309) ~[ojdbc8-21.5.0.0.jar:21.5.0.0.0]
Кто-нибудь может помочь?