tiene el siguiente problema:¿Cómo creo una carga de archivo en griales que funciona con Oracle?
Intenté crear una funcionalidad de carga de archivos simpel en griales. Acabo de crear una clase de dominio con un
byte[] rawFile
como propiedad. Grails hizo la mayor parte del resto para mí. Funcionó bien para el estándar hsqldb en el entorno de desarrollo.
Luego lo implementé en el servidor con un oráculo db configurado (controlador delgado). Todo menos la carga del archivo funciona bien con el oráculo db. Para la carga de archivos me sale un (por lo que yo puedo recordar)
excepción de SQL: ORA-01461: se puede unir un valor LONG sólo para inserción en un largo
He intentado varias maneras de solucionar (incluyendo algunos mapeos de columnas a blobs y usando java.sql.blob en lugar de byte []) pero nada funcionó realmente y fui en una dirección donde mi código ya no sería independiente de db.
Google no me ayudó realmente y mis libros de grails tampoco ayudan.
Guardar el archivo en el disco no es una buena solución en mi opinión.
Así que aquí es mi pregunta:
cómo puedo crear un archivo de carga en griales que funciona con Oracle?
actualización: Tiene algunas informaciones adicionales. Se las arregló para reproducir el problema con la Edición XE de Oracle:
Hibernate crea una columna VARBINARIA (255) para el archivo raw. Así que traté de subir un archivo de 4 bytes y funcionó.
Luego cambié manualmente el tipo de columna a 'blob' y funcionó con archivos más grandes.
Luego añade
static mapping = {
columns {
rawFile type:'blob'
}
}
a mi clase de dominio y que dejó de funcionar: errors.GrailsExceptionResolver
ERROR - [B no puede ser echado a java.sql.Blob java.lang. ClassCastException: [B no se puede convertir a java.sql.Blob
:-(
¡Genial! Parece que hizo el truco! – rdmueller
¡Así que no es una solución! Tengo ese tipo de problema y si no configuro el tipo de campo para blob, en la base de datos Oracle el tipo de campo se configura como LONG. Me pregunto cómo se puede considerar esta respuesta como la correcta y una buena solución. :) – emilan