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

Spring Java Discussion :

erreur lors d'un select avec BD HSQL [Data]


Sujet :

Spring Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 11
    Points
    11
    Par défaut erreur lors d'un select avec BD HSQL
    Bonsoir,

    J'essaie d'obtenir la liste des questions d'un quizz et
    j'ai une erreur de ce type lorsque je lance via la methode ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	@SuppressWarnings("unchecked")
    	// obtenir la liste des questions d'un quizz
    	public List<Question> getAllQuestion(int idQuizz) {
    		return em.createQuery("select q from Question q join q.quizz qq where qq.quizz.idQuizz := ind")
    				.setParameter("ind", idQuizz).getResultList();
    	}
    le message d'erreur suivant apparait, mais je ne le comprends.
    Est-ce ma requête qui n'est pas correcte?

    L'exception suivante s'est produite : org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : near line 1, column 72 [select q from metier.Question q join q.quizz qq where qq.quizz.idQuizz := ind]

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    J'ai modifier ma requête qui me semble plus correcte, mais ça ne marche pas encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // obtenir la liste des questions d'un quizz
    	public List<Question> getAllQuestion(int idQuizz) {
    		return em.createQuery("select q from Question q where q.idQuizz = : ind")
    				.setParameter("ind", idQuizz).getResultList();
    	}

    message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L'exception suivante s'est produite : org.hibernate.QueryException: could not resolve property: idQuizz of: metier.Question [select q from metier.Question q where q.idQuizz = : ind]

  3. #3
    Invité
    Invité(e)
    Par défaut
    normalement si ta table est Question vous devez enlever le q apres Qestion et ça marchera.

    return em.createQuery("select q from Question where idQuizz = : ind")
    .setParameter("ind", idQuizz).getResultList();

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    Votre query mélange le SQL et le HQL :

    si vous voulez faire un query natif, utilisez em.createNativeQuery;
    si vous voulez faire un query HQL, ne référencez pas les champs FK avec le nom de la colonne en SQL mais bien avec le nom du champ en Java et donc le paramètre de la fonction ne sera pas un "PK_type idQuizz" mais un "Quizz inQuizz".

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Si j'ai bien compris ça sera alors :

    return em.createQuery("select q from Question q join q.quizz where Quizz.idQuizz = : ind")?

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    Citation Envoyé par buxan Voir le message
    Si j'ai bien compris ça sera alors :

    return em.createQuery("select q from Question q join q.quizz where Quizz.idQuizz = : ind")?
    Non.
    Vous n'avez rien rien compris, c'est toujours un mélange SQL/HQL erroné.

    donc soit du SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    em.createNativeQuery("select * from Question where idQuizz = :ind")
    soit du HQL, …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public List<Question> getAllQuestion(Quizz inQuizz) 
    {
    return em.createQuery("from Question q where q.ownerQuizz = :quizz").setParameter("quizz", inQuizz).getResultList();
    }
    (pour peu que le champ @ManyToOne exprimant la relation Question -> Quizz s'appelle "q.ownerQuizz" dans la class Question, adaptez à la définition de votre classe Question)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Merci jeitEmgie

    j'ai nommé la relation idQuizz :

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "idQuizz", nullable = false)
    private Quizz quizz;
    donc je devrais faire :
    public List<Question> getAllQuestion(Quizz inQuizz)
    {
    return em.createQuery("select q from Question q where q.idQuizz = :quizz").setParameter("quizz", inQuizz).getResultList();
    }

    mais moi je passe en paramètre un int, donc la commande devrait etre ??? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public List<Question> getAllQuestion(int id) 
    {
    return em.createQuery("select q from Question q where q.idQuizz = :quizz").setParameter("quizz", id).getResultList();
    }
    Aussi je pensais que c'etait du JPQL que j'etais en train de faire, à moins que je n'ai encore rien compris

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    HQL, JPQL, … pour ce qui nous concerne ici c'est du pareil au même…
    dans les 2 cas on manipule des entités et c'est le convertisseur qui traduira le fait de référencer une entité par sa clé primaire dans le code SQL qu'il générera, mais en aucun cas vous ne devez manipuler directement le type de clé vous-même.

    Vous ne pouvez pas parler de "idQuizz" dans un query HQL/SPQL : le convertisseur va essayer de convertir "idQuizz" qu'il considère comme un nom de champ de l'entité Java en nom de colonne SQL et comme idQuizz n'est pas un nom de champ de l'entité puisque c'est déjà le nom de la colonne : çà ne fonctionnera jamais.

    Si vous n'avez que la PK du Quizz à ce stade de votre code, il faut d'abord charger l'entité et la passer ensuite à la première version de la fonction
    OU
    écrire le query en SQL en utilisant createNativeQuery.

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

Discussions similaires

  1. Erreur lors de la selection avec DBLookupComboBox
    Par teZone dans le forum Débuter
    Réponses: 3
    Dernier message: 15/06/2009, 12h20
  2. Erreur lors de la compilation avec OmniORB
    Par JohnKwada dans le forum CORBA
    Réponses: 1
    Dernier message: 07/09/2006, 17h34
  3. [KNOPPIX] Erreur lors de l'installation avec kaella
    Par fizz56 dans le forum Autres
    Réponses: 8
    Dernier message: 09/06/2006, 10h46
  4. [ASP][SQL]Erreur lors d'un select
    Par DEC dans le forum ASP
    Réponses: 12
    Dernier message: 08/06/2004, 17h54
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h51

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