Екземплярът на Clob е свързан с „oracleConnection“, който използвате, за да го създадете, а SimpleJDBCCall използва друга връзка за извикването на DB. Има две независими сесии от гледна точка на DB и това е причината clob да не съществува в сесията, използвана от SimpleJDBCCall.
Връзката, която използва SimpleJDBCCall, трябва да се използва за създаването на Clob.
Успях да реша подобен проблем чрез внедряване на SQLData и чрез извличане на текущата връзка:
Map<String, Object> values = new HashMap<>();
values.put("IN_bean_type", new MyBean());
simpleJdbcCallOperations.execute(values);
MyBean:
class MyBean implements SQLData {
...
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
...
Clob clob = ((OracleSQLOutput)stream).getSTRUCT().getJavaSqlConnection().createClob(); //hack to get the current connection
clob.setString(1, "stringValue");
stream.writeClob(clob);
...
}
...
}