Quiero almacenar una entidad (una cadena + una imagen) en PostgresQL utilizando Spring MVC e Hibernate Aquí está mi tabla. La imagen se supone que es el tipo de oid.mal valor para tipo largo: - Postgresql, Hibernate, Spring
CREATE TABLE document
(
name character varying(200),
id serial NOT NULL,
content oid, // that should be the image
CONSTRAINT document_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
Aquí está la entidad que quiero almacenar.
@Entity
@Table(name = "document")
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name="content")
private Blob content; //this is the image
//getters- setters
Puede ver que la variable "nombre" es una Cadena, no Larga. Aún cuando envíe el formulario con un valor que no es numérico que arroja org.postgresql.util.PSQLException: Bad value for type long : x
aquí es la forma:
<form:form method="post" action="save.html" commandName="document" enctype="multipart/form-data">
<form:errors path="*" cssClass="error"/>
<table>
<tr>
<td><form:label path="name">Name</form:label></td>
<td><form:input path="name" /></td>
</tr>
<tr>
<td><form:label path="content">Document</form:label></td>
<td><input type="file" name="file" id="file"></input></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Add Document"/>
</td>
</tr>
</table>
</form:form>
Si entro en un valor numérico y lo presentará, en Aceptar. Pero cualquier valor no numérico desencadena la excepción mencionada ... Leí que podría deberse a que no uso el OID correctamente, pero no sé qué debería hacer para eliminar esta excepción. En realidad, tampoco entiendo el nombre de la excpeción. Dice "valor incorrecto para el tipo largo". ¿pero quién quiere tipo largo? la variable "nombre" es tipo String !!!!
Por último, aquí es el controlador
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("document") Document document, @RequestParam("file") MultipartFile file) {
try {
Blob blob = Hibernate.createBlob(file.getInputStream());
document.setContent(blob);
documentDao.save(document);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:/index.html";
}
se appriciated Cualquier consejo.
Es posible que desee intentar anotar su declaración Blob con la anotación hibernate @Lob. Además, puede ser útil activar la salida de consulta de hibernate para que pueda ver el sql que se está generando y ver si le da una pista de lo que se está enviando a la base de datos. – jcern
@Lob no ayuda, lo siento –
Un OID no puede contener un BLOB. ["El tipo oid se implementa actualmente como un entero de cuatro bytes sin signo."] (Http://www.postgresql.org/docs/9.0/static/datatype-oid.html). Supongo que de ahí viene el error. – madth3