क्लॉब इंस्टेंस 'ओरेकलकनेक्शन' से जुड़ा हुआ है जिसका उपयोग आप इसे बनाने के लिए करते हैं और SimpleJDBCCall डीबी कॉल के लिए एक और कनेक्शन का उपयोग करता है। DB के दृष्टिकोण से दो स्वतंत्र सत्र हैं और यही कारण है कि SimpleJDBCCall द्वारा उपयोग किए गए सत्र में क्लॉब मौजूद नहीं है।
Clob निर्माण के लिए SimpleJDBCCall द्वारा उपयोग किए जाने वाले कनेक्शन का उपयोग किया जाना चाहिए।
मैंने SQLData को लागू करके और वर्तमान कनेक्शन को निकालकर इसी तरह की समस्या को हल करने में कामयाबी हासिल की है:
Map<String, Object> values = new HashMap<>();
values.put("IN_bean_type", new MyBean());
simpleJdbcCallOperations.execute(values);
मायबीन:
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);
...
}
...
}