couture de téléchargement de fichiers à postgres bytea colonne colonne “ est bytea, mais l'expression est de type bigint”
Suit de près cet exemple, je suis le téléchargement d'un fichier de petite taille, et d'essayer de magasin dans postgresql bytea colonne.
Ici est une erreur (deux premières sorties de l'ouverture de la session des états de la sortie d'attributs de haricot avant de l'INSERT est tentée:
De SAUGE 1 -- action.de l'enregistrement.LetterTemplateHome - content-type: text/xml
De SAUGE 1 -- action.de l'enregistrement.LetterTemplateHome - letterTemplateText: [B@48c7aaef
De SAUGE 1 -- action.de l'enregistrement.LetterTemplateHome - contenu de la Chaîne: xml version="1.0" encoding="UTF-8" standalone="yes" .... etc
De SAUGE 1 -- org.mise en veille prolongée.util.JDBCExceptionReporter - saisie des Lots 0 insérer dans letter_template (content_type, file_name_template, taille, letter_template_name, letter_template_text, letter_template_id) values ('text/xml', 'letterDate.xml', '0', 'yu', '37078', '202') a été abandonnée. Appel getNextException pour voir la cause.
De SAUGE 1 -- org.mise en veille prolongée.util.JDBCExceptionReporter - ERREUR: la colonne "letter_template_text" est de type bytea, mais l'expression est de type bigint
Astuce: Vous aurez besoin de réécrire ou de la fonte de l'expression.
Position: 162
ici est la façon dont le champ est défini dans le bean:
private byte[] letterTemplateText;
@Lob
@Column(name = "letter_template_text")
@Basic(fetch = FetchType.LAZY)
public byte[] getLetterTemplateText() {
return this.letterTemplateText;
}
public void setLetterTemplateText(byte[] letterTemplateText) {
this.letterTemplateText = letterTemplateText;
}
OriginalL'auteur mcgyver5 | 2012-02-02
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que Hibernate est d'essayer d'utiliser le "large object" avec PostgreSQL, ce qui implique de stocker un OID "poignée" pour le fichier dans la table. Quelques exemple de lecture: http://virgo47.wordpress.com/2008/06/13/jpa-postgresql-and-bytea-vs-oid-type/
Si vous voulez coller avec juste l'aide d'un bytea colonne (et c'est beaucoup plus simple de travailler avec sur le SQL de côté), l'utilisation BinaryType pour mapper la colonne. Voir: bon hibernate annotations de type byte[]
OriginalL'auteur araqnid
Ce n'est pas vraiment répondre à votre question, mais j'ai pensé que je pourrais partager avec vous de toute façon...
Il y a deux façons de stocker des fichiers à l'aide d'une base de données, vraiment: stocker le contenu réel du fichier (comme vous le faites) et stocker uniquement le chemin d'accès du fichier (et de l'enregistrer dans le système de fichiers).
J'ai travaillé avec les deux méthodes, et j'ai préféré le dernier pour deux raisons: je peux déplacer mes fichiers vers d'autres disques durs, partitions, et même d'y accéder via un partage et tout ce que j'ai à faire est de changer les chemins d'accès aux fichiers dans la base de données. De plus, il rend la base de données de décharges (aka les sauvegardes) beaucoup plus petits et plus rapides à effectuer.
OriginalL'auteur Andre