mauvaise valeur pour le type long: - Postgresql, Hibernate, Spring
Je veux stocker une entité(une Chaîne de caractères + une image) dans PostgresQL à l'aide de Spring MVC, Hibernate et
Voici ma table. L'image est censé être le type de l'oid.
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
);
Ici est l'entité que je veux stocker.
@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
Vous pouvez voir la variable "nom" est une Chaîne de caractères, pas Longtemps. Quand je soumettre le formulaire avec une valeur qui n'est pas numérique, il jette org.postgresql.util.PSQLException: Bad value for type long : x
ici est de la forme:
<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 je entrer une valeur numérique et de le soumettre, OK. Mais de toute valeur non numérique déclenche l'exception mentionnée ci-dessus...j'ai lu qu'il pourrait être causée par la que je n'utilise pas d'OID correctement, mais je ne sais pas ce que je dois faire pour éliminer cette exception. En fait, je ne comprends pas le nom de l'excpetion. Il est dit "mauvaise valeur pour le type de long" . mais qui veut de type long? la variable "nom" est de type String!!!!
Enfin, ici, c'est le Contrôleur de
@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";
}
Tout conseil est appriciated.
source d'informationauteur Sanyifejű
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire, mais il n'était pas lié à l'ordre du champ ID dans la base de données.
Après quelques recherches j'ai trouvé cette en exergue le fait que les Lobs en veille prolongée sont traités comme des Oid, sauf indication contraire.
Cela signifie que Hibernate va essayer de mettre un Lob dans une Longue donc produire cette exception PSQLException: valeur incorrecte pour le type long
La façon de spécifier que le Métier est d'être traités comme du texte est en annotant le domaine
quand j'ai créé le tableau de la colonne "nom" qui est arrivé à être le premier. Ce n'est pas bon.
L'Id doit être la première colonne. Si je change l'ordre des colonnes, il fonctionne très bien...
J'ai fait face à smiler erreur et la raison était que j'étais en avoir quelques-uns des caractères autres que des entiers de type de données integer déposé
par exemple- ,111 et 144 - etc