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 :

[Hibernate] exception SQLGrammarException


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut [Hibernate] exception SQLGrammarException
    Debutant sous hibernate, j'essaie de faire un test de base pour me familiariser avec le framework.
    Travaillant sous eclipse et apres bien des déboires avec Hibernate tools, j'ai réussi a obtenir quelque chose de convenable avec hibernate synchroniser (et a la main )

    Seulement voila j'obtiens une exception bien étrange
    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
     
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:107)
        at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:44)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
        at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
        at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
        at Test.main(Test.java:18)
    Caused by: org.postgresql.util.PSQLException: ERROR: column "id" does not exist
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:430)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:346)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:250)
        at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:85)
        ... 11 more
    14:21:38,614  WARN JDBCExceptionReporter:71 - SQL Error: 0, SQLState: 42703
    14:21:38,614 ERROR JDBCExceptionReporter:72 - ERROR: column "id" does not exist
    D'apres ce que je comprend, il ne trouve pas la colonne id dans ma table user de la base de données (postgreSQL), mais je vous affirme qu'elle existe bien cette colonne.

    Avez vous une idée du probleme qui se pose ici ?

    PS : ci joint mon fichier de mapping de la classe en cause
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 82
    Par défaut
    pourrais-tu donner le script de création de ta base?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Ouep, alors vu que ce n'est qu'un petit test pas de script a proprement parler mais simplement 2 tables de creer avec pgAdmin

    la table User :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE "User"
    (
      id int2 NOT NULL,
      nom varchar(20) NOT NULL,
      CONSTRAINT "User_pkey" PRIMARY KEY (id)
    ) 
    WITHOUT OIDS;
    ALTER TABLE "User" OWNER TO postgres;
    la table Fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE "Fichiers"
    (
      id int2 NOT NULL,
      "nomFic" varchar(50) NOT NULL,
      "idUser" int2,
      CONSTRAINT "Fichiers_pkey" PRIMARY KEY (id),
      CONSTRAINT "Fichiers_idUser_fkey" FOREIGN KEY ("idUser")
          REFERENCES "User" (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    ) 
    WITHOUT OIDS;
    ALTER TABLE "Fichiers" OWNER TO postgres;
    Sachant que coté Java, pour le moment je ne m'occupe que des User (chaque chose en son tps).

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    Bonjour,

    le id introuvable est peut être celui de la table fichier.

    La classe java fichier est elle correcte ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Euh c'est a dire que pour le moment, je ne me suis pas occupé des Fichiers, il n'y a donc pas de classe fichiers (je viens de tester, même avec la classe fichiers et le mapping correspondant l'erreur est toujours la)

    Je rajoute une interrogation : pourquoi je me fait jeter si je met un id generator sequence alors que postgres et censé le gérer ?

    Voila voila toujours la même erreur selon lui la colonne id n'existe pas ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    ajoute la visualization des traces sql dans Hibernate

    <property name="hibernate.show_sql">true</property>

    tu pourras ainsi récupérer la requete SQL qui pose probleme.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    C'est vraiment sympa Pietra (et les autres) de m'aider parce que la je suis en train de m'arracher les cheveux devant le PC.

    alors j'ai trouver la solution pour la sequence suffid=sait de declarer une sequence ds postgre ...

    Par contre nouvelle exception levé et la toujours autant du chinois pour moi
    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
     
    Hibernate: select nextval ('hibernate_sequence')
    Hibernate: select nextval ('hibernate_sequence')
    Hibernate: insert into User (nom, id) values (?, ?)
    Hibernate: insert into User (nom, id) values (?, ?)
    17:17:00,894  WARN JDBCExceptionReporter:71 - SQL Error: 0, SQLState: null
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at Test.main(Test.java:26)
    Caused by: java.sql.BatchUpdateException: L'élément du batch 0 insert into User (nom, id) values (Dupont, 3) a été annulé. Appeler getNextException pour en connaître la cause.
        at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2478)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1298)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2540)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
        ... 8 more
    17:17:00,894 ERROR JDBCExceptionReporter:72 - L'élément du batch 0 insert into User (nom, id) values (Dupont, 3) a été annulé. Appeler getNextException pour en connaître la cause.
    17:17:00,904  WARN JDBCExceptionReporter:71 - SQL Error: 0, SQLState: 42601
    Donc ce que je comprend il n'a pas de valeur a mettre au moment de l'insertion mais alors pourquoi ....

    il n'arrive pas a executer le batch alors que la il me met bien les bonne valeur, il me dit de tester GetNextException mais je ne vois vraiment pas ou le faire (je sais que cela s'utilise derriere une SQLException mais j'en ai pas dans mon propre code ...)

    Donc detail :

    J'utilise la classe HibernateUtil du tuto dvp

    Voici mon main
    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
     
    public static void main(String[] args) throws HibernateException{
     
            Session session = HibernateUtil.currentSession();
     
            Transaction tx = session.beginTransaction();
     
            User us = new User();
            us.setNom("Durand");
            session.save(us);
     
            us = new User();
            us.setNom("Maurice");
            session.save(us);
     
            tx.commit();
            HibernateUtil.closeSession();
            }
    Je lance un AU SECOURS trop marre entre Eclipse qui veut pas avec Hibernate tools, Hibernate Synchronizer qui me créer plein de classe avec de l'heritage dont je me moque éperduement. J'en peux plus la pfffff

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Hep hep hep, si ya des gens du matin ....

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    et ca ?
    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
     
     
    public static void main(String[] args) throws HibernateException{
     
            Session session = HibernateUtil.currentSession();
     
            Transaction tx = session.beginTransaction();
     
            User user1 = new User();
            user1.setNom("Durand");
            session.save(user1);
     
            User user2 = new User();
            user2.setNom("Maurice");
            session.save(user2);
     
            tx.commit();
            HibernateUtil.closeSession();
            }

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Nan nan ca ne change rien, je viens même d'essayer de refaire l'integralité du projet à la main, sans utiliser les outils de génération et à l'arrivé même erreur ...
    Même avec un seul enregistrement pareil, même erreur

    Donc je reitère mon appel au secours, j'aimerais vraiment utiliser cette technologie (apprentissage perso ...) mais je commence à me demander si je ne vais pas finir par coder moi même le truc (CRUD ...)

    Edit : voila ce que retourne SQL en erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    9:47,803  WARN JDBCExceptionReporter:71 - SQL Error: 0, SQLState: null
    11:19:47,803 ERROR JDBCExceptionReporter:72 - L'élément du batch 0 insert into User (nom, id) values (Maurice, 11) a été annulé. Appeler getNextException pour en connaître la cause.
    11:19:47,803  WARN JDBCExceptionReporter:71 - SQL Error: 0, SQLState: 42601
    11:19:47,803 ERROR JDBCExceptionReporter:72 - ERROR: syntax error at or near "User"
    11:19:47,813 ERROR AbstractFlushingEventListener:300 - Could not synchronize database state with session
    org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
    Syntax error at or near "User" --> oui mais ou ? dans le mapping ?
    AbstractFlushingEventListener:300 - Could not synchronize database state with session --> Euh quelq'un a deja obtenu cette erreur et comment l'a t'il corrigé ?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Up du matin, chagrin ...

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    Bonjour,

    ton code et ton mapping me paraissent pourtant corrects.

    par contre dans les traces on trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into User (nom, id) values (Maurice, 11)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into User (nom, id) values ('Maurice', 11)
    mais peut être est ce du aux traces et ce n'est pas ce qui est réellement envoyé au SGBD.

    Dans le cas contraire c'est surement un problème de driver ou de configuration Hibernate.

    Au fait as tu essayé de lire des informations en base plutôt que d'écrire ?

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    Bonjour,

    ton code et ton mapping me paraissent pourtant corrects.

    par contre dans les traces on trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into User (nom, id) values (Maurice, 11)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into User (nom, id) values ('Maurice', 11)
    mais peut être est ce du aux traces et ce n'est pas ce qui est réellement envoyé au SGBD.

    Dans le cas contraire c'est surement un problème de driver ou de configuration Hibernate.

    Au fait as tu essayé de lire des informations en base plutôt que d'écrire ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Merci de ton aide Pietra, c'est bon j'ai solutionné le problème, même que ce que j'avais fais depuis le début ne contenait pas d'erreur. L'erreur venait seulement du fait qu' une table qui s'appelle user n'est pas bien apprécié par postgres, je l'ais renommé utilisateur et ca marche

    Je me permet une petite interrogation supplementaire, voila pour les besoins d'un projet, mes identifiant doivent être bien specifique (une sequence aleatoire de 8 chiffres). Savait vous comment cela est implementable avec hibernate :
    - Puis-je donner l'id de mon choix à la creation de l'objet et donc simplement insérer le champs id comme un autre champs ?
    - Faut t'il absoluement passer par un id generator et a ce moment existe t'il un id correspondant à mon desir, ou puis je définir mon propre id generator ?

    Si les 2 sont possibles, quel est selon vous le plus élégant (programmer élégant, une obsession )

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Par défaut
    J'ai un problème très similaire il est expliqué en détails ici:
    http://www.developpez.net/forums/sho...47#post2278147

    Mais j'ai l'impression que les requètes généré ne comporte pas de " ni de ' ce qui génère des erreur postgres.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/09/2007, 22h50
  2. Réponses: 3
    Dernier message: 19/01/2006, 14h49
  3. [Hibernate] Exception bizarre NoSuchElementException
    Par lilou77 dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/01/2006, 15h44
  4. [Hibernate] exception entre MySQL et MS SQL
    Par lilou77 dans le forum Hibernate
    Réponses: 7
    Dernier message: 13/01/2006, 11h52
  5. [Hibernate exception]
    Par agougeon dans le forum Hibernate
    Réponses: 7
    Dernier message: 08/01/2006, 17h36

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