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 :

Requête en HQL [HQL]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Par défaut Requête en HQL
    Bonjour,
    Désolée de vous déranger avec çà, mais vous êtes mon derniers recours. J'ai recherché de la doc pour réaliser des requêtes HQL mais j'ai pas tout compris

    Ce qui est frustant c'est que ma requête en SQL fonctionne mais celle du HQL, absolument pas

    Donc ma requête en SQL est la suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT distinct unite.idUnite
    FROM unite, service, personne, perssemainecompt, semaine, uniteservice
    WHERE unite.idUnite = uniteservice.idUnite
    AND uniteservice.idService = service.idService
    AND service.idService = personne.idService
    AND personne.idPersonne = perssemainecompt.idPersonne
    AND perssemainecompt.idSemaine = Semaine.idSemaine
    AND Semaine.idSemaine =311
    Comme vous pouvez le constater, j'utilise un certain nombre de joint venture pour accéder à l'information recherchée pour un critère précis.

    Je vous montre donc désormais ce que j'ai fait en HQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String queryString = "select distinct u " +
    "from " +
    "Unite as u, Service as s, Personne as p, Perssemainecompt as psc, Semaine as sem " +
    "join u.services as uniteServ" +
    "join s.unites as servUnite" +
    "join p.service as persServ" +
    "join p.perssemainecompts as persCompt" +
    "join sem.perssemainecompts as SemCompt" +
    "where sem.idSemaine =?";

    J'ai un message d'erreur (bien évidemment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.reflect.InvocationTargetException
    Quelqu'un pourrait il m'aider ?

  2. #2
    Membre très actif Avatar de omarcisses
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2007
    Messages : 227
    Par défaut
    Je pense que ta requete doit être comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    "select distinct u " +
    "from " +
    "Unite as u
        inner join u.services as uniteServ
    "join uniteServ.unites as servUnite" +
    ainsi de suite

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Par défaut
    je crois que c'est un problème au niveau jar essaye de télécharger ce jar et vérifier si ça marche ou pas

    antlr-3.1.1.jar

  4. #4
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Par défaut
    Merci beaucoup de votre réponse. Par contre, est ce que le type des attributs présents en base peuvent avoir une incidence sur la requete notamment pour la jointure.
    Je m'explique :
    Dans ma classe Unite.java, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Unite implements java.io.Serializable {
     
    	private Integer idUnite;
    	private String nomUnite;
    	private Set<Service> services = new HashSet<Service>(0);
    et dans ma classe Service.java, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Service implements java.io.Serializable {
     
    	private Integer idService;
    	private String nomService;
    	private Set<Unite> unites = new HashSet<Unite>(0);
    (c'est le framwork hibernate qui a généré ces attributs entre eux car la relation entre ces table est de type (n-n) )

    J'ai également une classe Personne.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Personne implements java.io.Serializable {
     
    	private Integer idPersonne;
    	private Droit droit;
    	private Fonction fonction;
    	private Userlogin userlogin;
    	private Service service;
    	private String nom;
    	private String prenom;
    	private String horaireContrat;
    	private Set<Perssemainecompt> perssemainecompts = new HashSet<Perssemainecompt>(0);
    qui porte entre autre comme attribut le service car la relation est de type (1-n)

    Ma question toute bête :
    Est ce qu'en fonction de la relation entre les 2 tables (ou 2 classe) l'écriture de la jointure change ?
    A quoi servent les alias ?

    Merci pour tout

  5. #5
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Par défaut
    Toujours pas de réponses ?

    Comme conseillé, j'ai utilisé le antlr-3.1.1.jar et ma requête hql est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "select distinct u " +
    				"from Unite as u " +
    				"join u.services as s "+
    				"join s.service as personne " +
    				"join personne.perssemainecompts as jointPersCompt " +
    				"join jointPersCompt.perssemainecompts as jointSemaine " +
    				"where jointSemaine.idSemaine =? ";
    J'ai désormais ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not resolve property: perssemainecompts of: com.maison.enfant.gestion.horaire.entitybeans.Service [select distinct u from com.maison.enfant.gestion.horaire.entitybeans.Unite as u join u.services as personne join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    Et je ne comprend pas ce que cela veut dire, et comment faire pour le solutionner.

    Dans ma classe Unite.java, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Unite implements java.io.Serializable {
     
    	private Integer idUnite;
    	private String nomUnite;
    	private Set<Service> services = new HashSet<Service>(0);
    et dans ma classe Service.java, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Service implements java.io.Serializable {
     
    	private Integer idService;
    	private String nomService;
    	private Set<Unite> unites = new HashSet<Unite>(0);
    (c'est le framwork hibernate qui a généré ces attributs entre eux car la relation entre ces table est de type (n-n) )

    J'ai également une classe Personne.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Personne implements java.io.Serializable {
     
    	private Integer idPersonne;
    	private Droit droit;
    	private Fonction fonction;
    	private Userlogin userlogin;
    	private Service service;
    	private String nom;
    	private String prenom;
    	private String horaireContrat;
    	private Set<Perssemainecompt> perssemainecompts = new HashSet<Perssemainecompt>(0);
    qui porte entre autre comme attribut le service car la relation est de type (1-n) entre la table service et personne

    et donc
    Est ce qu'en fonction de la relation entre les 2 tables (ou 2 classe) l'écriture de la jointure change ? (je pense que oui mais je ne sais pas comment)
    A quoi servent les alias ?

    Il est vrai que je suis une véritable buse en hibernate et hql, car c'est mon premier projet que je développe avec ces technologies, et j'ai vraiment besoin de votre coup de main.

    Merci pour tout

  6. #6
    Membre très actif Avatar de omarcisses
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2007
    Messages : 227
    Par défaut
    Normal regarde bien ton erreur "join u.services as personne" alors que ça doit être "join u.services as s" ce qui fait qu'il cherche "perssemainecompts" dans la table service et non celle de personne

  7. #7
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Par défaut
    Merci beaucoup de votre réponse


    Par contre, avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct u " +
    				"from Unite as u " +
    				"join u.services as s "+
    				"join personne.perssemainecompts as jointPersCompt " +
    				"join jointPersCompt.perssemainecompts as jointSemaine " +
    				"where jointSemaine.idSemaine =? ";
    j'ai désormais ce message d'erreur que je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid path: 'personne.perssemainecompts' [select distinct u from com.maison.enfant.gestion.horaire.entitybeans.Unite as u join u.services as s join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    Vraiment désolée d'abuser de votre temps

  8. #8
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Par défaut
    Merci beaucoup de votre compréhension.

    Comment puis-je faire une jointure entre l’entité "Service" et l’entité "Personne", sachant que dans l'entité 'Personne', j'ai un attribut service, mais que dans la table service je n'ai rien qui soit rattaché à Personne. (relation de type 1-n) ?
    C'est l'un des aspect du HQL que j'ai du mal à comprendre .....:/

    Merci pour tout

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

Discussions similaires

  1. [HQL] Requête basique HQL
    Par Annsen dans le forum Hibernate
    Réponses: 4
    Dernier message: 02/11/2011, 14h19
  2. Requêter en HQL les propriétés de type Collection
    Par sicard_51 dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/03/2010, 20h08
  3. [Débutant] Requête HQL : le joker %
    Par tck-lt dans le forum Hibernate
    Réponses: 3
    Dernier message: 21/12/2006, 15h10
  4. Réponses: 2
    Dernier message: 24/08/2006, 11h02
  5. [HQL] erreur requête delete
    Par PamelaGeek dans le forum Hibernate
    Réponses: 4
    Dernier message: 17/02/2006, 13h27

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