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

JPA Java Discussion :

problème de requête jpql


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 25
    Par défaut problème de requête jpql
    Bonjour à tous, je suis en train de développer une application de CRUD avec JPA hybernate. J'ai une erreur sur une de mes requête en particulier.
    1ere question comment peut on tester les requêtes jpql ?
    2eme question, voila la requête qui pose probleme. Si jamais quelqu'un voit l'erreur je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      public PointDePassage getByPosition(Long idPosition) throws Exception {
            Query query = em.createQuery("SELECT pdp FROM PointDePassage pdp WHERE pdp.position_id LIKE :"+idPosition);
            //query.setParameter("position_id", "%" + idPosition + "%");
            PointDePassage pdp = (PointDePassage) query.getSingleResult();
            return pdp;
        }
    Pour préciser, l'entity PointDePassage possede un objet Position. La table PointDePassage possède un champ position_id pour relier les 2 entitys.
    J'utilise netbeans 6.5.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 76
    Par défaut
    Tu as demandé a Wawa? ^^

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Par défaut
    Les ":" après ton like

    Si tu cherches des exemples sur le net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String ejbql = "SELECT i from Item i WHERE i.name LIKE :pattern ESCAPE
    :esc";
    Query query = em.createQuery(ejbql);
    query.setParameter("pattern", "\\_%");
    Les ":" signifient que c'est un paramètre.

    Du coup, ton code se transforme en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public PointDePassage getByPosition(Long idPosition) throws Exception {
    Query query = em.createQuery("SELECT pdp FROM PointDePassage pdp WHERE pdp.position_id LIKE :idPosition");
    query.setParameter("idPosition", "%" + idPosition + "%");
    PointDePassage pdp = (PointDePassage) query.getSingleResult();
    return pdp;
    }
    EDIT : Ceci dit, un Like sur un nombre...

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 25
    Par défaut
    Voila l'erreur générée par le code que tu m'a donné.

    java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: position_id of: entreprise.PointDePassage [SELECT pdp FROM entreprise.PointDePassage pdp WHERE pdp.position_id LIKE :idPosition]

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 25
    Par défaut
    Et voila l'erreur généré par mon code sans ta modification.

    java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: expecting IDENT, found '1' near line 1, column 75 [SELECT pdp FROM entreprise.PointDePassage pdp WHERE pdp.position_id LIKE :1]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Par défaut
    Oups en effet...

    Dans la ligne "SELECT pdp FROM PointDePassage pdp WHERE pdp.position_id"

    Le nom du champ position_id doit être celui du champ coté Java et non côté SQL.
    Je supposerai donc que ça doit être positionId.

    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public PointDePassage getByPosition(Long idPosition) throws Exception {
    Query query = em.createQuery("SELECT pdp FROM PointDePassage pdp WHERE pdp.positionId LIKE :idPosition");
    query.setParameter("idPosition", "%" + idPosition + "%");
    PointDePassage pdp = (PointDePassage) query.getSingleResult();
    return pdp;
    }

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 25
    Par défaut
    comment faire en sorte que idPosition soit pris en compte comme une variable dans la requete?
    En sql il faut mettre +nomVarible; par exemple.

Discussions similaires

  1. Problème requête JPQL
    Par btssouma dans le forum JPA
    Réponses: 8
    Dernier message: 11/10/2016, 13h29
  2. Problème requête JPQL
    Par l_informaticien dans le forum JPA
    Réponses: 0
    Dernier message: 02/02/2013, 15h15
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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