2012-08-22 7 views
11

Używam narzędzi Hibernuj 3.2.1.GA ze Spring version 3.0.2. Przywiązuję się do wstawienia danych do bazy Oracle (10g) w polu bazy danych typu clob w następujący sposób.Wywołanie java.sql.SQLException: operacja niedozwolona: typ strumieni nie może być używany podczas grupowania podczas wstawiania danych do typu danych clob Oracle.

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

to działa dobrze, ale gdy próbuję wstawić strumień danych z wykorzystaniem CKEditor, demo na mojej stronie JSP (the CKEditor prostu renderuje HTML <textarea></textarea> element), który może obejmować tekst sformatowany, a także obrazy, flash itp., rzuca następujący wyjątek.

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 

Jak rozwiązać ten wyjątek? Czy to jest Oracle driver problem czy coś innego? Używam ojdbc14.jar, Oracle JDBC Driver version - 9.0.2.0.0.


UPDATE:

Jednym z podmiotów, który używa typu Clob jest

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. 
} 

W moim wiosennym klasie kontrolera używam następujący kod do wykonywania wstawienie na typ Clob w Oracle.

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 Gdzie jest po prostu Map model, formalny parametr metody w klasie kontrolera Wiosny submit() która jest wywoływana, gdy przycisk submit kliknięciu na stronie JSP.


mam pobierania danych za pomocą następującego prostą metodę w klasie kontrolera Wiosna

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(); 
} 

próbował zrobić jak wspomniano here ale bezskutecznie (jestem w obliczu tych samych wyjątków określonych w to pytanie).

+0

To był rzeczywiście problem sterownika Oracle. Używałem 'Oracle JDBC Driver version - 9.0.2.0.0'. Właśnie pobrałem nową wersję z [here] (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html), która jest 'Oracle JDBC Driver version - 10.2.0.5. 0', który działa dobrze we wszystkich sytuacjach. – Tiny

+6

Powinieneś opublikować to jako odpowiedź i oznaczyć ją. – pickypg

+4

@Tiny Odpowiedz na swoje pytanie, a następnie oznacz jako odpowiedź. Dziękuję Ci. –

Odpowiedz

18

Wyjątek, który został zgłoszony, o czym wspomniano w pytaniu, wynika z faktu, że starsza wersja sterowników Oracle może nie działać z typami danych typu clob Oracle. Używałem Oracle JDBC Driver version - 9.0.2.0.0. Pobrałem nową wersję z here, która jest Oracle JDBC Driver version - 10.2.0.5.0, która działa dobrze dla mojej aplikacji we wszystkich sytuacjach.

Gdzieś w Internecie, ktoś stwierdził, że jeśli dane przechowywane przez CKEditor są konwertowane (kodowane) na base64 podczas wstawiania do typu danych Clob Oracle, podejście będzie działało bez aktualizacji sterownika (znaczy z starsza wersja sterowników Oracle) (co jest oczywiste, wymaga dekodowania z base64 podczas pobierania danych z bazy danych).

ale rzeczywiście nie wprowadziłem go w życie, ponieważ nowa wersja sterownika, który pobrałem, działa dobrze dla mnie. Nie jestem pewien co do późniejszego podejścia i zostawiam to czytelnikom.

Powiązane problemy