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

  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 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
    Non ne t'excuse pas c'est pas grave on a le temps et on est la pour ça.

    Regarde bien tu n'as pas alias "personne" car tu as créer un alias pour unite as u mais pas pour personne c'est pourquoi il te dis qu'il ne connais pas 'personne.perssemainecompts'.

  9. #9
    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

  10. #10
    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
    Rien ne t'empeche de creer une relation service personne. Tu peux le faire et la ta jointure sera plus simple

  11. #11
    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 omarcisses pour tes réponses et ton aide, j'ai essayé de mettre en place la relation service personne.
    Pour cela, j'ai changé la requete de la façon 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, Personne as p " +
    				"join u.services as s "+
    				"join p.service as personne "+
    				"join personne.perssemainecompts as jointPersCompt " +
    				"join jointPersCompt.perssemainecompts as jointSemaine " +
    				"where jointSemaine.idSemaine =? ";
    et j'ai désormais cette 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, com.maison.enfant.gestion.horaire.entitybeans.Personne as p join u.services as s join p.service as personne join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    Cela me parait d'autant plus bizarre que j'ai l'impression que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join p.service as personne
    est interprété comme étant la table service alors que j'ai bien spécifié la table personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "from Unite as u, Personne as p " +
    Auriez vous une explication et si je peux me permettre d'abuser, comment auriez vous fait pour créer la relation service personne ? ?

    Merci pour tout

  12. #12
    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
    Essaie ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "select distinct u " +
    				"from Unite as u " +
    				"join u.services as s "+
    				"join s.personnes as personne "+
    				"join personne.perssemainecompts as jointPersCompt " +
    				"join jointPersCompt.perssemainecompts as jointSemaine " +
    				"where jointSemaine.idSemaine =? ";

  13. #13
    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 me consacrer de votre temps.
    J'ai essayé ce que vous m'avez proposé mais cela n'a pas fonctionné.


    J'ai eu ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not resolve property: personnes 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 s join s.personnes as personne join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    En effet, dans la table service (ou entité service) il n'y a pas d'attribut personne

    Dans ces 2 classes, j'ai :

    Service.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Table(name = "service", catalog = "gestionhoraire")
    public class Service implements java.io.Serializable {
     
    	private Integer idService;
    	private String nomService;
    	private Set<Unite> unites = new HashSet<Unite>(0);
    Personne.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Table(name = "personne", catalog = "gestionhoraire")
    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);
    La relation entre ces 2 tables est de type 1-n : 1 personne travaille que dans 1 seul service, 1 service est composé de plusieurs personnes.

    Auriez vous par hasard d'autres idées ?
    Merci d'avance de votre aide

  14. #14
    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
    Tu peux creer une relation onetomany en ajoutant un un set de personne dans societe

  15. #15
    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
    Je vais tester

    Donc dans l'entite Service.java, il faut que je fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Set<Personne> personnes = new HashSet<Personne>(0);
    Mais est ce qu'il faut que je fasse également une modification dans la table service ?

    Je ne pensais pas qu'utiliser HQL était aussi complexe

  16. #16
    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
    en modifiant seulement les entités

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @OneToMany(mappedBy = "societe", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     
    	Set<Personne> personnes;

  17. #17
    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
    J'ai rajouté dans la classe Service.java,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private Set<Personne> personnes = new HashSet<Personne>(0);
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "service")
    public Set<Personne> getPersonnes() {
    	return personnes;
    }
     
    public void setPersonnes(Set<Personne> personnes) {
    	this.personnes = personnes;
    }
    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.personnes as personne "+
    "join personne.perssemainecompts as jointPersCompt " +
    "join jointPersCompt.perssemainecompts as jointSemaine " +
    "where jointSemaine.idSemaine =? ";
    Désormais, grâce à vous, le message d'erreur est différents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not resolve property: perssemainecompts of: com.maison.enfant.gestion.horaire.entitybeans.Perssemainecompt [select distinct u from com.maison.enfant.gestion.horaire.entitybeans.Unite as u join u.services as s join s.personnes as personne join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    Alors que la relation entre la table personne et la table persSemCompt est de type 1-1
    J'ai dans l'entite 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);
    et pour le moment j'ai dans la classe Perssemainecompt.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Perssemainecompt implements java.io.Serializable {
     
    	private Integer idPersSemaineCompt;
    	private Compteur compteur;
    	private Semaine semaine;
    	private Personne personne;
    	private String observation;
    Si j'ai bien tout compris, il faut donc que je rajoute également un set, dans cette table ?

  18. #18
    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
    La relation Personne et Perssemainecompt c'est 1-1 donc il faut juste déclarer
    dans personne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Perssemainecompt perssemainecompts = new Perssemainecompt();
    et ne fais pas de jointure

  19. #19
    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
    En relisant mes derniers post, je viens de me rendre compte que les informations relative au relation entre tables étaient erronée

    Afin de mieux appréhender mon problème je vais vous expliquer un peu plus mon projet :
    Je développe une application de gestion des horaires pour élaborer un planning.

    J'ai donc une relation entre service et personne de type 1-n : une personne travaille dans 1 et 1 seul service, alors qu'un service est composé de 1 à plusieurs personnes.
    Service.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Table(name = "service", catalog = "gestionhoraire")
    public class Service implements java.io.Serializable {
     
    	private Integer idService;
    	private String nomService;
    	private Set<Unite> unites = new HashSet<Unite>(0);
     
    	private Set<Personne> personnes = new HashSet<Personne>(0);
    Personne.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Table(name = "personne", catalog = "gestionhoraire")
    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);
    Mon autre relation est qu'une personne travaille 1 ou plusieurs semaines et une semaine est travaillé par 1 ou plusieurs personnes. J'ai donc une relation de type n-n.


    Afin de relier ces 2 tables, j'ai fait une table associative, qui comporte comme attributs, entre le compteur (afin de savoir le nombre d'heure travailler dans la semaine par semaine.)

    Perssemainecompt.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Table(name = "perssemainecompt", catalog = "gestionhoraire")
    public class Perssemainecompt implements java.io.Serializable {
     
    	private Integer idPersSemaineCompt;
    	private Compteur compteur;
    	private Semaine semaine;
    	private Personne personne;
    	private String observation;
    Semaine.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Table(name = "semaine", catalog = "gestionhoraire")
    public class Semaine implements java.io.Serializable {
     
    	private Integer idSemaine;
    	private int numeroSemaine;
    	private String roulementSem;
    	private Date dateModif;
    	private Date dateDebutSem;
    	private Date dateFinSem;
    	private String previsionnel;
    	private Set<Perssemainecompt> perssemainecompts = new HashSet<Perssemainecompt>(
    			0);
    	private Set<Jour> jours = new HashSet<Jour>(0)
    ;

    Donc j'ai un attribut commun entre la table Semaine.java et Personne.java


    En faisant ma requête HQL,
    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.personnes as personne "+
    						"join personne.perssemainecompts as jointPersCompt " +
    						"join jointPersCompt.perssemainecompts as jointSemaine " +
    						"where jointSemaine.idSemaine =? ";
    J'obtiens comme 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.Perssemainecompt [select distinct u from com.maison.enfant.gestion.horaire.entitybeans.Unite as u join u.services as s join s.personnes as personne join personne.perssemainecompts as jointPersCompt join jointPersCompt.perssemainecompts as jointSemaine where jointSemaine.idSemaine =? ]
    Chose qui est tout à fait normale, étant donnée que dans la table Perssemainecompt.java, je n'ai pas l'attribut perssemainecompts....

    Comment puis je écrire ma requête pour qu'elle puisse fonctionne.
    Je sais que grâce à vous, la solution est à porté de main , mais je n'arrive pas à comprendre le mécanisme du HQL.

    J'ai bien conscience d'abuser de votre temps, mais comment auriez vous fait pour la requête ?
    En outre, auriez vous un site à me conseiller pour comprendre le fonctionnement du HQL ?

    Vraiment désolée de vous déranger avec ces questions qui doivent vous sembler simple.

  20. #20
    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
    Enleve "join jointPersCompt.perssemainecompts as jointSemaine " + pour voir ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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