[ALG3ir Java] Erreur lors de requête HQL

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 11:40

Bonjour,

dans la préparation du TD5, nous devons suivre l'exemple suivant afin de nous familiariser avec hibernate.

En ayant suivi pas à pas le tutoriel, j'arrive au problème suivant:


et je ne comprends pas où je dois chercher pour le résoudre Sad

car si je comprends bien le message d'erreur il ne trouve pas le fichier
org.hibernate.hql.classic.ClassicQueryTransactionFactory, mais je pense que ce fichier est inclus dans les librairies d'hibernate non?

pouvez-vous m'aider ?

PS:

j'utilise netbeans 6.9.1 avec l'exemple sakila sous mysql le tout sous os x



Dernière édition par aleben89 le Lun 12 Déc 2011, 09:38, édité 3 fois

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Nicky le Dim 11 Déc 2011, 12:28

aleben89 a écrit:

j'utilise netbeans 6.9.1 avec l'exemple sakila sous mysql le tout sous os x

Dans la section:

Adding Hibernate Support to the Project
Modifying the Hibernate Configuration File
il y a ceci :
Note for NetBeans IDE 6.9. You must type org.hibernate.hql.classic.ClassicQueryTranslatorFactory as the Property Value. In NetBeans IDE 6.9, the Property Value in the dropdown list for the factory class is incorrect.

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 12:38

Je regarderais, mais quand j'étais a cette étape la les truc de config était équivalent a la photo du tuto et ca allait jusque la Smile je tiens au courant début d'aprem car je ne suis pas sur le pc pour le moment

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 14:11

Voilà effectivement c'était ça, j'ai retapé exactement "org.hibernate.hql.classic.ClassicQueryTranslatorFactory" dans optionnal properties sous section miscellanous properties et ça fonctionne du moins pas vraiment Sad

j'ai ceci comme message d'erreur:

Code:
org.hibernate.exception.SQLGrammarException: could not execute query
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
   at org.hibernate.loader.Loader.doList(Loader.java:2223)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
   at org.hibernate.loader.Loader.list(Loader.java:2099)
   at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:912)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from limit 100' at line 1
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
   at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
   at com.mysql.jdbc.Util.getInstance(Util.java:381)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
   at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
   at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
   at org.hibernate.loader.Loader.doQuery(Loader.java:674)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
   at org.hibernate.loader.Loader.doList(Loader.java:2220)
   ... 8 more

si j'ai de nouveau bien compris, la syntaxe est incorrect avec 'from limit 100' à la ligne 1, sauf que je ne vous pas où je l'ai écrit ce from limit 100 Sad

Edit:

apparemment le limit 100 viens de qui se trouve au milieu a droite de l'écran , comment ne pas le mettre ? pour éviter l'erreur ?

Il y a t-il autre chose à modifier pour que ça fonctionne ?

Edit 2:

si je fais en manuel sql une requête avec un limit il me le prend correctement en plus Sad
Code:
select * from actor limit 10

ça fonctionne correctement :



aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Nicky le Dim 11 Déc 2011, 16:07

J'utilise aussi mysql, enfin la version noob avec un lampp (xampp) et je n'ai pas eu de probèlme avec ce tuto.

Tu as vu? on voit que PBT a bosser le projet Very Happy id 1 Nom : Guiness ! c'est pas un hasard Very Happy

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 16:27

Nicky a écrit:
Tu as vu? on voit que PBT a bosser le projet Very Happy id 1 Nom : Guiness ! c'est pas un hasard Very Happy

heu juste pour info, je ne suis pas sur que la db salika (db de incluse dans netbeans) soit crée ou modifiée par lui :p

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Nicky le Dim 11 Déc 2011, 16:29

Non tu crois?

tu as des problèmes avec le second degrés toi Very Happy

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  LSV le Dim 11 Déc 2011, 16:36

J'ai jamais eu ce type d'erreur, mais j'imagine que si il te dit:


..."from limit 100' at line 1"... c'est que ton ordre SQL ne contient pas la table ou aller chercher les données. Du coup, il y a bien une erreur de synthaxe Very Happy


select * from actor limit 10
et
select * from limit 10


c'est pas la même chose Smile

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 17:08

Nicky a écrit:Non tu crois?

tu as des problèmes avec le second degrés toi Very Happy

pour le moment j'ai des problèmes avec trop de choses en même temps :p

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Dim 11 Déc 2011, 17:11

LSV a écrit:J'ai jamais eu ce type d'erreur, mais j'imagine que si il te dit:


..."from limit 100' at line 1"... c'est que ton ordre SQL ne contient pas la table ou aller chercher les données. Du coup, il y a bien une erreur de synthaxe Very Happy


select * from actor limit 10
et
select * from limit 10


c'est pas la même chose Smile

Merci LSV de prendre la peine de répondre, mais c'est du HQL en non du SQL (HQL = SQL de plus haut niveau) et l'ordre en HQL que je mets, je spécifie que la table justement (from Actor) ... Sad

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aleben89 le Lun 12 Déc 2011, 09:38

J'ai trouvé !!!! il y a un caractère non utf-8 dans actor.java (erreur de build non vue). Une fois que le fichier est ouvert, il affichera un popup, ouvrir le fichier, sauvergarder puis ça fonctionne Smile

aleben89

Nombre de messages : 108
Age : 27
Prénom : Benjamin
Statut : Etudiant 3ème Réseau
Localisation : Bruxelles ou en province de Luxembourg (perdu en verte campagne entre 2 champs)
Date d'inscription : 27/01/2009

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jhon le Ven 13 Jan 2012, 10:22

Ayant un soucis similaire (?) mais où cette solution ne suffit pas, je relance le sujet.

Je peux faire du SQL, mais pas du HQL. Même la requête la plus simple (mettons, "from Serie") ne fonctionne pas en HQL, j'obtiens toujours une SQLGrammarException ("could not execute query"), couplée à une SQLSyntaxErrorException ("encountered USER at..."). Si le query est lancé depuis mon code, je peux voir qu'effectivement Hibernate insère USER comme nom de schéma à utiliser dans le query.
J'en déduis qu'il ne trouve pas le schéma (ce qui expliquerait qu'il ne reconnaît pas mes noms de colonnes lorsque je tente des query plus précis), mais shooter les exceptions dans mon moteur de recherche favoris ne donne rien de probant.

J'ai déjà changé la version de Netbeans (maintenant 7.0.1), et la factory_class du xml de config est la bonne. La solution de Ben n'a rien changé chez moi, pas plus que la construction du projet.

Je pourrais continuer le projet en restant en SQL, mais c'est quand même dommage de pas pouvoir profiter à fond d'Hibernate, et j'aimerais pouvoir utiliser HQL au moins pour les query qui utilisent des inputs user (et j'aime pas quand un compilo me résiste).

Si quelqu'un a déjà eu un tel soucis, je suis preneur de toute idée Smile


Dernière édition par Jhon le Ven 13 Jan 2012, 10:34, édité 1 fois

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jokosar le Ven 13 Jan 2012, 10:34

Euh, tu utilises bien les noms de variable des classes generé ? et non celle qui sont dans ta BD ?

Si en bd ta un truc qui s'appelle ingredient_id qui est un int

sous hibernate il s'appellera ingredientId

Ta requete hql doit porter sur ingredientId et non ingredient_id

Jokosar

Nombre de messages : 72
Localisation : au 202 ...
Date d'inscription : 29/05/2007

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jhon le Ven 13 Jan 2012, 10:43

Je suis au courant pour la casse. Mais juste au cas où, deux paires d'yeux... :

Dans la DB :
CREATE TABLE Serie(
id int primary key,
nom varchar(30) not null);
Dans le .java :
public class Serie implements java.io.Serializable {
private int id;
private String nom;
Mon query SQL qui marche :
Query q = session.createSQLQuery("select NOM from SERIE")
Mon query HQL qui marche pas :
Query q = session.createQuery("select nom from Serie");
L'erreur exacte quand je tente ledit query :
Exception in thread "AWT-EventQueue-0" org.hibernate.QueryException: undefined alias: nom [select nom from model.Serie]

L'erreur exacte quand je tente un simple "from Serie" depuis le XML :
org.hibernate.exception.SQLGrammarException: could not execute query
(...)
Caused by: java.sql.SQLSyntaxErrorException: Erreur de syntaxe : Encountered "from" at line 1, column 9.
(...)

(Le tout sous JavaDB.)

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Dj x-fuse le Ven 13 Jan 2012, 12:07

Quand on m'a annoncé que Hibernate c'était la joie et la bonne humeur du SQL en Java j'y ai cru...

... Ensuite j'ai testé... > <

Dans le p2 chez nous j'ai le même prob, que j'utilise javaDB sous win ou MySQL sous os x il n'aime pas mes "from maTable" :/

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Nicky le Ven 13 Jan 2012, 12:11

essaye mysql sous linux...


nan j deconne..

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aquavirius le Ven 13 Jan 2012, 12:11

Jhon a écrit:Mon query HQL qui marche pas :
Query q = session.createQuery("select nom from Serie");

Si tu veux fais un Select sur les nom en HQL :
Query q = session.createQuery("select serie.nom from Serie serie");

aquavirius

Nombre de messages : 34
Age : 28
Prénom : Laurent
Statut : Ancien
Date d'inscription : 29/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jhon le Ven 13 Jan 2012, 12:45

Déjà corrigé (merci Sarko), mais
j'obtiens toujours une SQLGrammarException ("could not execute query"), couplée à une SQLSyntaxErrorException ("encountered USER at...")

-edit:
Merci Aqua pour la solution : enlever l'attribut schema dans les xml des classes. Pourtant le schéma existe bien... Enfin soit. Problem solved

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  pbt le Ven 13 Jan 2012, 15:30

J'avais constaté qu'utiliser le schéma APP fonctionnait bien. (Lorsque j'avais voulu changer de schéma, ça m'avait apporté pas mal d'erreurs ... il faut changer ça partout)

As-tu essayé une instruction du style
Code:
...
session.createCriteria(Language.class).list();
...

Je trouve toujours dommage d'essayer d'apprendre le HQL alors qu'il existe les criteria.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aquavirius le Ven 13 Jan 2012, 16:37

pbt a écrit:
Je trouve toujours dommage d'essayer d'apprendre le HQL alors qu'il existe les criteria.

D’après ce que je sais et de ce qu’on peut lire, on préféra d’utiliser HQL pour les requêtes static (plus performent)
et utiliser criteria pour les requêtes dynamique (plus de vérification, …).

C’est presque le même débat entre : mettre des procédures au niveau du SGBD ou directement dans l’application. Wink



aquavirius

Nombre de messages : 34
Age : 28
Prénom : Laurent
Statut : Ancien
Date d'inscription : 29/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jhon le Sam 14 Jan 2012, 03:35

pbt a écrit:J'avais constaté qu'utiliser le schéma APP fonctionnait bien.
Le schéma qui était utilisé existe bien, je sais pas pourquoi JAvaDB n'en voulait pas... Maintenant je n'en précise aucun et ça passe.

As-tu essayé une instruction du style
Code:
...
session.createCriteria(Language.class).list();
...
Oui :
ClassCastException: model.Edition cannot be cast to java.lang.String
Et si j'écris le nom à la main :
MappingException: Unknown entity: Edition
(j'ai pas cherché pourquoi pour le moment, là j'essaie de faire marcher les tablemodel)

Je trouve toujours dommage d'essayer d'apprendre le HQL alors qu'il existe les criteria.
Pourquoi ?
Les query criteria sont plus longs à écrire pour un résultat équivalent, moins lisibles à mon goût et puis c'est jamais qu'un emballage "objet" autour de requêtes Hibernate... Et puis, apprendre le HQL, c'est pas grand-chose, il est si proche du SQL, alors que Criteria faut déjà comprendre quelle méthode correspond à quelle clause.

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Nicky le Sam 14 Jan 2012, 10:57


Je trouve toujours dommage d'essayer d'apprendre le HQL alors qu'il existe les criteria.
Pourquoi ?
Les query criteria sont plus longs à écrire pour un résultat équivalent, moins lisibles à mon goût et puis c'est jamais qu'un emballage "objet" autour de requêtes Hibernate... Et puis, apprendre le HQL, c'est pas grand-chose, il est si proche du SQL, alors que Criteria faut déjà comprendre quelle méthode correspond à quelle clause.[/quote]

tu trouve ca compliquer?
Code:
 public static Object selectItem(String classType, String viewAttribut, Object value) throws ClassNotFoundException {
        session = HibernateUtil.getSessionFactory().openSession();
        Criteria crit = session.createCriteria(Class.forName(classType));
        crit.add(Restrictions.eq(viewAttribut, value));

        return crit.uniqueResult();
    }
( je rassure je ferme la session)

l'avantage pour moi c'est que si tu veux plusieur critere , tu passe un simple tableau tu parcours le tableau en bouclant sur crit.add et tu as un truc cours et très lisible non?

Donc pour reprendre ce qui a été dis, quand la requete se corse ca aide criteria.

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  aro le Sam 14 Jan 2012, 12:21

Jhon a écrit:Le schéma qui était utilisé existe bien...
J'arrive pas à y croire Shocked D'après ce qui précède, tu as utilisé USER comme nom de schéma.
Ce n'est pas possible, c'est un mot réservé du SQL. Essaie
Code:
Query q = session.createSQLQuery("select NOM from USER.SERIE");
et tu devrais avoir la même erreur qu'avec HQL.

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Jhon le Dim 15 Jan 2012, 05:24

@Aro :
C'est le nom que j'avais choisi pour le compte utilisateur, et Hibernate a donc repris le nom pour le schéma. Avec Aqua on a supposé que c'était un mot réservé, d'où le problème, mais j'ai pas été vérifier après avoir trouvé la solution.

@Nicky :
Pas compliqué, moins lisible Wink On verra bien, il me reste deux gros query qui joignent toutes mes tables...

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG3ir Java] Erreur lors de requête HQL

Message  Contenu sponsorisé Aujourd'hui à 15:18


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum