Cá thể Clob được gắn với 'oracleConnection' mà bạn sử dụng để tạo nó và SimpleJDBCCall sử dụng một kết nối khác cho lệnh gọi DB. Có hai phiên độc lập theo quan điểm DB và đó là lý do tại sao khối không tồn tại trong phiên được SimpleJDBCCall sử dụng.
Kết nối mà SimpleJDBCCall sử dụng phải được sử dụng để tạo Clob.
Tôi đã quản lý để giải quyết một vấn đề tương tự bằng cách triển khai SQLData và bằng cách trích xuất kết nối hiện tại:
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);
...
}
...
}