Передача объекта 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]

Кто-нибудь может помочь?

0 ответов

Другие вопросы по тегам