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 :

erreur requete hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut erreur requete hibernate
    Bonjour,

    Ma requete ne passe pas, je comprends pas pourquoi. J'ai le code suivant.

    public class Test {

    public static void main(String[] arg) {

    System.out.println("OK");
    Session session = HibernateSessionFactory.currentSession();
    Transaction tx = null;
    tx = session.beginTransaction();
    Query q = session.createQuery("from TbVilles where code='ABC'");

    List list = q.list();
    Iterator it = list.iterator();
    while(it.hasNext()) {
    TbVilles v = (TbVilles)it.next();
    System.out.println(v.getnomVille());
    quand j'execute, j'ai ca: (le nom de ma table est TV_VILLES)

    og4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:1596)
    at org.hibernate.loader.Loader.list(Loader.java:1577)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
    at service.Test.main(Test.java:23)
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 'TB_VILLES' : nom d'objet incorrect.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1272)
    at org.hibernate.loader.Loader.doQuery(Loader.java:391)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
    at org.hibernate.loader.Loader.doList(Loader.java:1593)
    ... 6 more
    Aidez moi svp a resoudre ce probleme.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Problème de mapping ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Citation Envoyé par fr1man
    Problème de mapping ?
    peut etre, en fait dans ma table, il y a pas une clé primaire. Donc j'ai rajouté le bout de code dans le fichier mapping

    <id name="Id" type="integer">
    <column name="id" sql-type="int(4)"/>
    <generator class="increment" />
    </id>

  4. #4
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Si le mapping est correct ... peut etre n'es tu pas obligé de te tourner vers les requetes HQL mais plutot l'API Criteria :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List villes = session.createCriteria(Ville.class).add(Restrictions.eq("code",monCode)).list();
    Si ce code est déclaré en clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ville ville = session.load(Ville.class, monCode);
    Si cette requete retourne un seul résultat mais que le code n'est pas clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ville villes = (Ville)session.createCriteria(Ville.class).add(Restrictions.eq("code",monCode)).uniqueResult();
    Bon courage

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 34
    Par défaut
    Merci,en fait, la table n'a pas de clé primaire, or hibernate l'exige. Comment on peut faire alors?

  6. #6
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    euh, il me semble qu'au départ, c'est ton SGBD qui doit exiger une clé primaire et non hibernate !!! :/

    Maintenant, si ton modèle objet n'a pas la clé primaire, la je comprend mieux la situation et te proposerait tout de même de modifier l'objet pour y insérer l'ID, quitte à ce que ce dernier ne soit qu'en private sans aucun accesseur ou getter (et tu peux alors spécifier à Hibernate d'acceder à cet objet directement par l'attribut et non via le getter. Ou bien tu met le getter /setter en private en espérant que cela convienne à Hibernate.

    Toujours est il qu'une table de BDD doit TOUJOURS avoir une clé primaire pour identifier un enregistrements ...

  7. #7
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 45
    Par défaut
    Citation Envoyé par BizuR
    Ou bien tu met le getter /setter en private en espérant que cela convienne à Hibernate.
    Je confirme, il est possible de déclarer "private" les accesseurs à un attribut mapper sans que cela ne dérange Hibernate.

    Citation Envoyé par BizuR
    Toujours est il qu'une table de BDD doit TOUJOURS avoir une clé primaire pour identifier un enregistrements ...
    Effectivement je pense aussi que c'est primordial...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb sum dans requete hibernate
    Par clairette dans le forum Hibernate
    Réponses: 1
    Dernier message: 03/07/2006, 10h34
  2. Erreur requete SQL/Access
    Par polianita dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/06/2006, 15h20
  3. Erreur requete en VBA
    Par temar dans le forum Access
    Réponses: 15
    Dernier message: 19/05/2006, 19h50
  4. Erreur requete MySQL
    Par kanabzh29 dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/05/2006, 14h08
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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