IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Ecriture d'un blob dans une base postgresql


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut Ecriture d'un blob dans une base postgresql
    Salut a tous
    j'ai la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE gallet
    (
      nom_gallet character varying(20) NOT NULL,
      img_gallet bytea,
      CONSTRAINT pk_gallet PRIMARY KEY (nom_gallet)
    )
    mappé par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
       "-//Hibernate/Hibernate Mapping DTD//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="hibernateClass">
       <class
          name="Gallet"
          table="gallet"
       >
          <meta attribute="sync-DAO">false</meta>
          <id
             name="nom_gallet"
             type="string"
             column="nom_gallet"
          >
     
          </id>
     
          <property
             name="ImgGallet"
             column="img_gallet"
             type="java.sql.Blob"
             not-null="false"
          />
             <set name="InfoModeleAvions" inverse="true">
             <key column="nom_gallet"/>
             <one-to-many class="InfoModeleAvion"/>
          </set>
       </class>   
    </hibernate-mapping>
    j'ai mis comme type pour imgGallet java.sql.Blob , je ne sais si exact ou pas .
    Bref je rencontre une exception lorsque j'essaie d'inserer un gallet dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Session s=HibernateUtil.currentSession();
          Transaction tx = s.beginTransaction();
          Gallet g=new Gallet();
          File fd = new File("c:\\img.jpg");
          FileInputStream fis;
          try {
             fis = new FileInputStream(fd);
             byte[] b = new byte[512];
          fis.read(b);
               g.setNom_gallet("petit gallet de test");
          g.setImgGallet(Hibernate.createBlob(b));
          s.save(g);
          tx.commit();
          HibernateUtil.closeSession();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into gallet (img_gallet, nom_gallet) values (17027, petit gallet de test) a été annulé. Appeler getNextException pour en connaître la cause.
       at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2531)
       at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1344)
       at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:343)
       at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2668)
       at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
       at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
       ... 8 more
    je ne sais si l'erreur provient du fichier de mappage ou de la maniere utilisé pour insérer le blob .
    J'ai inserer ces 2 lignes dans le fichier .config la l'exception a changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <property name="hibernate.jdbc.batch_size">0</property>
     
          <property name="hibernate.jdbc.use_streams_for_binary">true</property>
    l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.postgresql.util.PSQLException: ERREUR: la colonne « img_gallet » est de type bytea mais l'expression est de type bigint
    Merci d'avance pour votre aide.
    Cordialement

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut
    l'exception est lancé lorsque tx.commit() est executé , des suggestions ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut GMB
    bonjour,
    la vérité c'est que hibernate mappe les type byte[] et Blod comme des OID(object ID) .Alors lorsque tu passes un Blod ou un bye[] cequi est envoyé à la BD c'est l'ID de ton objet en mémoire.

    pour mon cas j'ai supprimé l'annotation "@Lob" et après dans la méthode ajouter() ,je sauvegarde l'enregistrement sans les champs images puis je fais immédiatement un Update de cet enregistrement en lui passant mon image dans un byte[]

    Bon Courage !

Discussions similaires

  1. insertion des blob dans une base de données
    Par ala1986 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/04/2009, 15h48
  2. inserer cle DES dans une base postgresql
    Par kam81 dans le forum Débuter
    Réponses: 1
    Dernier message: 23/01/2009, 14h03
  3. ajout dans une base postgresql
    Par anisj1m dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 15/10/2008, 09h47
  4. Créer et insérer un blob dans une base Access
    Par Invité1 dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/12/2007, 08h03
  5. [VB] recuperer un blob dans une base
    Par estampille dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/01/2006, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo