2011-07-05 33 views
5

Me he encontrado con el siguiente problema, que parece ser uno prettycommon. La excepción es Cannot update entity: [...] nested exception is java.sql.BatchUpdateException: ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column. Parece que a Oracle no le gusta vincular valores grandes (> 4000 caracteres) a parámetros después de un LOB o CLOB. ¿Alguien ha resuelto este problema?Extraño error de Oracle con Hibernate y CLOB

Respuesta

9

Esto es: ORA-24816
** Es una limitación, y las variables de vinculación LARGAS deben ser las últimas en una declaración. **

fuente: http://www.odi.ch/weblog/posting.php?posting=496

Solución: Al renombrar los campos del modelo de hibernación para que la columna CLOB tiene un nombre que viene después que la columna de varchar2 al ordenar alfabéticamente (que prefija el campo CLOB en el clase java con una 'z'), todo funciona bien porque el parámetro clob viene después del parámetro varchar en la consulta hibernate construye.

+1

he encontrado que con las entidades XML mapeado podría cambiar el orden de las propiedades de la configuración para obtener los CLOBs hasta el final de la instrucción INSERT/UPDATE. P.ej. '' –

2

Encontramos el mismo problema con Hibernate 3.2.1 y lo solucionamos insertando el registro sin CLOB primero y luego actualizando ese registro con CLOB.

public class Employee{ 

    @Lob 
    @Column 
    private String description; 

    //getters setters 
} 

String desc = emp.getDescription(); 
emp.setDescription(null); 
session.save(entity); 
session.flush(); 
session.evict(entity); 

StringBuilder sb = new StringBuilder(); 
sb.append("update Employee set description:description"); 
Query updateQuery = session.createQuery(sb.toString()); 
updateQuery.setParameter("description", desc, Hibernate.STRING); 
updateQuery.executeUpdate(); 

Si está utilizando anotaciones de Hibernate, entonces no hay manera de predecir el orden de las columnas en la instrucción de inserción. Esto fue arreglado en Hibernate v4.1.8.

https://hibernate.atlassian.net/browse/HHH-4635