2012-08-22 21 views
11

में डेटा डालने के दौरान स्ट्रीम प्रकार का उपयोग बैचिंग में नहीं किया जा सकता है। मैं स्प्रिंग संस्करण 3.0.2 के साथ हाइबरनेट उपकरण 3.2.1.GA का उपयोग कर रहा हूं। मैं निम्नानुसार clob प्रकार के ओरेकल (10 जी) डेटाबेस फ़ील्ड में डेटा डालने के लिए तैयार हूं।java.sql.SQLException: ऑपरेशन की अनुमति नहीं है: ओरेकल क्लोब डेटा प्रकार

Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage"); 
pojoObj.setSomeClobProperty(c); 

यह सिर्फ ठीक काम करता है, लेकिन जब मैं एक CKEditor, demo मेरी JSP पेज पर उपयोग कर डेटा की एक धारा को सम्मिलित करने का प्रयास है कि स्वरूपित पाठ के साथ ही छवियों शामिल हो सकता है (CKEditor बस एक HTML <textarea></textarea> तत्व renders), फ़्लैश आदि, यह निम्नलिखित अपवाद फेंकता है।

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1] 

org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1] 

java.sql.SQLException: operation not allowed: streams type cannot be used in batching 

कैसे है कि अपवाद को हल करने? क्या यह Oracle driver problem या कुछ और है? मैं ojdbc14.jar, Oracle JDBC Driver version - 9.0.2.0.0 का उपयोग कर रहा हूं।


अद्यतन:

संस्थाओं Clob प्रकार का उपयोग करता है में से एक

public class Cms implements java.io.Serializable 
{ 
    private BigDecimal cmsId; 
    private Clob aboutUs;  //I'm currently dealing with this property. 
    private Clob contactUs; 
    private Clob privacyPolicy; 
    private Clob returnPolicy; 
    private Clob shippingPolicy; 
    private Clob termsOfUse; 
    private Clob exchangeLinks; 
    private Clob disclaimer; 
    private Clob aboutProducts; 
    private Clob purchasingConditions; 
    private Clob faq; 

    //Parameterized constructor(s) along with the default one as and when needed. 

    //Getters and setters. 
} 

मेरी स्प्रिंग नियंत्रक वर्ग में, मैं प्रदर्शन करने के लिए निम्नलिखित कोड का उपयोग कर रहा है ओरेकल में Clob प्रकार पर सम्मिलन।

Cms c=new Cms(); 
c.setCmsId(new BigDecimal(0)); 
c.setAboutUs(Hibernate.createClob(request.getParameter("txtAboutUs"))); 
session.save(c); 
session.flush(); 
session.getTransaction().commit(); 
model.put("status", "1"); 
model.put("msg","Insertion done successfully."); 
//setParameter(cb); 

कहाँ model बस एक Map model, स्प्रिंग नियंत्रक कक्षा में submit() विधि है जो जब एक सबमिट बटन JSP पेज पर क्लिक किया जाता है शुरू हो जाती है की एक औपचारिक पैरामीटर है।


मैं वसंत नियंत्रक वर्ग

private void getData(Map model) 
{ 
    Session session=NewHibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    List<Cms>list=session.createQuery("from Cms order by cmsId desc").list(); 
    model.put("list", list); 

    session.flush(); 
    session.getTransaction().commit(); 
} 

उल्लेख here रूप में, लेकिन कोई लाभ नहीं हुआ (में निर्दिष्ट के रूप में मैं एक ही अपवाद का सामना करना पड़ रहा हूँ करने के लिए क्या करने की कोशिश की में निम्नलिखित सरल विधि का उपयोग कर डेटा पुन: प्राप्त कर रहा हूँ यहसवाल)।

+0

यह वास्तव में ओरेकल ड्राइवर समस्या थी। मैं 'ओरेकल जेडीबीसी चालक संस्करण - 9.0.2.0.0' का उपयोग कर रहा था। मैंने अभी [http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html) से एक नया संस्करण डाउनलोड किया है जो 'ओरेकल जेडीबीसी चालक संस्करण - 10.2.0.5 है। 0' जो सभी परिस्थितियों में ठीक काम करता है। – Tiny

+6

आपको इसे उत्तर के रूप में पोस्ट करना चाहिए और इसे चिह्नित करना चाहिए। – pickypg

+4

@Tiny अपने स्वयं के प्रश्न का उत्तर दें और फिर इसे उत्तर के रूप में चिह्नित करें। धन्यवाद। –

उत्तर

18

प्रश्न में उल्लिखित अपवाद को इस तथ्य के कारण था कि ओरेकल ड्राइवरों का पुराना संस्करण ओरेकल क्लोब डेटाटाइप के साथ काम नहीं कर रहा है। मैं Oracle JDBC Driver version - 9.0.2.0.0 का उपयोग कर रहा था। मैंने here से एक नया संस्करण डाउनलोड किया जो Oracle JDBC Driver version - 10.2.0.5.0 है जो सभी स्थितियों में मेरे आवेदन के लिए ठीक काम करता है।

कहीं इंटरनेट पर, यह किसी के द्वारा कहा गया था कि अगर सीकेएडिटर द्वारा आयोजित डेटा को ओरेकल क्लोब डेटाटाइप में डालने के दौरान बेस 64 में परिवर्तित किया जाता है, तो दृष्टिकोण ड्राइवर को अपडेट किए बिना काम करने जा रहा है (इसका मतलब है ओरेकल ड्राइवरों का पुराना संस्करण) (जिसे डेटाबेस के डेटा को पुनर्प्राप्त करते समय स्पष्ट रूप से बेस 64 से डीकोड करना आवश्यक है)।

लेकिन मैंने वास्तव में इसे अभ्यास में नहीं रखा क्योंकि मैंने डाउनलोड किए गए ड्राइवर का नया संस्करण मेरे लिए ठीक काम कर रहा है। इसलिए, मैं बाद के दृष्टिकोण के बारे में निश्चित नहीं हूं और मैं इसे पाठकों को छोड़ रहा हूं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^