2012-08-22 29 views
11

Estoy usando Hibernate Tools 3.2.1.GA con Spring versión 3.0.2. Estoy tratando de insertar datos en el campo de base de datos Oracle (10g) de tipo clob de la siguiente manera.java.sql.SQLException: operación no permitida: el tipo de secuencias no se puede usar en lotes mientras se insertan datos en el tipo de datos de Oracle clob

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

funciona muy bien, pero cuando intento insertar una corriente de datos usando un CKEditor, demo en mi página JSP (la CKEditor simplemente hace que un archivo HTML <textarea></textarea> elemento) que puede incluir texto con formato, así como imágenes, flash, arroja la siguiente excepción.

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 

Cómo resolver esa excepción? ¿Es este el Oracle driver problem o algo más? Estoy usando ojdbc14.jar, Oracle JDBC Driver version - 9.0.2.0.0.


ACTUALIZACIÓN:

Una de las entidades que utilizan el tipo Clob es

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

En mi clase controlador primavera, estoy usando el siguiente código para llevar a cabo inserción en el tipo Clob en 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); 

Dónde model es simplemente una Map model, un parámetro formal del método submit() en la clase del controlador de primavera, que se invoca cuando se hace clic en un botón de envío en la página JSP.


estoy recuperar datos utilizando el siguiente método simple en la clase del controlador de primavera

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

tratado de hacer como se ha mencionado here pero en vano (estoy frente a las mismas excepciones como se especifica en esa pregunta).

+0

Fue de hecho el problema del controlador de Oracle. Estaba usando 'Oracle JDBC Driver version - 9.0.2.0.0'. Acabo de descargar una nueva versión de [aquí] (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html) que es 'Oracle JDBC Driver version - 10.2.0.5. 0' que funciona bien en todas las situaciones. – Tiny

+6

Deberías publicar eso como la respuesta y marcarlo. – pickypg

+4

@Tiny Responda su propia pregunta y luego márquela como respuesta. Gracias. –

Respuesta

18

La excepción que se arrojó como se menciona en la pregunta se debió a que la versión anterior de los controladores de Oracle podría no funcionar con el tipo de datos Oracle clob. Yo estaba usando Oracle JDBC Driver version - 9.0.2.0.0. Descargué una nueva versión de here que es Oracle JDBC Driver version - 10.2.0.5.0 que funciona perfectamente para mi aplicación en todas las situaciones.

En algún lugar de Internet, alguien afirmó que si los datos almacenados en un CKEditor se convierten (codifican) en base64 mientras se insertan en el tipo de datos Oracle clob, el enfoque funcionará sin actualizar el controlador (significa con la versión anterior de los controladores de Oracle) (que es tan obvio requiere decodificar desde base64 mientras recupera los datos de la base de datos).

pero de hecho no lo puse en práctica ya que la nueva versión del controlador que descargué funciona bien para mí. Entonces, no estoy seguro acerca del enfoque posterior y se lo dejo a los lectores.

Cuestiones relacionadas