Die Clob-Instanz ist an die „oracleConnection“ gebunden, mit der Sie sie erstellen, und der SimpleJDBCCall verwendet eine andere Verbindung für den DB-Aufruf. Aus DB-Sicht gibt es zwei unabhängige Sessions und das ist der Grund, warum der Clob nicht in der von SimpleJDBCCall verwendeten Session existiert.
Die Verbindung, die SimpleJDBCCall verwendet, muss für die Clob-Erstellung verwendet werden.
Ich habe es geschafft, ein ähnliches Problem zu lösen, indem ich SQLData implementiert und die aktuelle Verbindung extrahiert habe:
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);
...
}
...
}