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 SQL et HQL


Sujet :

Hibernate Java

  1. #21
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,je vais te répondre exactement la même chose que dans mon post précédent, j'ai l'impression qu'on est dans un dialogue de "sourd" là.
    Une référence sur une objet semaine te permet d'obtenir tous les objets rattachés à cette semaine via les accesseurs.Si tu avais pris le temps de lire en appliquant les exemples des tutos qu'on t'a transmis il y'a bien longtemps que tu aurais compris ce qu'on tente de t'expliquer.Voici la solution à ton problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String queryString =
    				"select distinct entiteSemaineRemontee From Semaine as entiteSemaineRemontee " +
    						"join fetch entiteSemaineRemontee.perssemainecompts as perssemainecompts " +
    						"join perssemainecompts.personne as personne "+
    						"join personne.service as service "+
    						"join fetch service.unites as unite";
    Et ainsi donc pour chaque entité Semaine remontée, cette liste de colonne de ton select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT distinct semaine.idSemaine, semaine.numeroSemaine, semaine.roulementSem, "+
    						"semaine.dateModif, semaine.dateDebutSem, semaine.dateFinSem, semaine.type, unite.nomUnite "+
    						"
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //semaine.idSemaine
    entiteSemaineRemontee.getIdSemaine()
    //semaine.numeroSemaine
    entiteSemaineRemontee.getNumeroSemaine();
    ...
    Avoir plusieurs colonnes dans un select d'une requete JPQL n'a de sens que si on ne peut pas naviguer (à la UML) entre les tables constituant la requête.
    Encore une fois tu refléchis beaucoup relationnel.Il faut bien avoir à l'esprit que tu fais des requêtes objets désormais avec JPA.

  2. #22
    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
    Bonjour,

    J'ai pris le temps de lire les différentes postes pour réaliser une requête HQL portant sur plusieurs tables. Sachant que je navigue d'objet en objet, j'ai saisi qu'il fallait utiliser les attributs des objets

    J'ai désormais un nouveau message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Unable to locate appropriate constructor on class [com.maison.enfant.gestion.horaire.display.SemaineDisplay] [select new com.maison.enfant.gestion.horaire.display.SemaineDisplay(unite.nomUnite, service.nomService, personne.nom, personne.prenom, fonction.descFonction,
    .........
     
    ; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class
    J'ai créé un objet SemaineDisplay.java dont les attributs provient de plusieurs tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    package com.maison.enfant.gestion.horaire.display;
     
    import java.sql.Time;
    import java.util.Date;
    import java.util.List;
     
    import com.maison.enfant.gestion.horaire.dto.AbsenceDTO;
    import com.maison.enfant.gestion.horaire.dto.PersonneDTO;
    import com.maison.enfant.gestion.horaire.dto.SemaineDTO;
    import com.maison.enfant.gestion.horaire.dto.ServiceDTO;
    import com.maison.enfant.gestion.horaire.dto.UniteDTO;
     
    public class SemaineDisplay {
    	private String nomUnite;
    	private String nomService;
    	private String nom;
    	private String prenom;
    	private String descFonction;
    	private String horaireAfaire;
    	private String horaireFaite;
    	private String observation;	
    	private Integer idSemaine;	
    	private String nomAbsence;	
    	private Time debutHoraire;
    	private Time finHoraire;
    	private String typeHoraire;
    	private String libelleJour;	
    	private Integer numeroSemaine;
    	private String roulementSem;	
    	private Date dateModif;
    	private Date dateDebutSem;
    	private Date dateFinSem;
    	public String getNomUnite() {
    		return nomUnite;
    	}
    	public void setNomUnite(String nomUnite) {
    		this.nomUnite = nomUnite;
    	}
    	public String getNomService() {
    		return nomService;
    	}
    	public void setNomService(String nomService) {
    		this.nomService = nomService;
    	}
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getPrenom() {
    		return prenom;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
    	public String getDescFonction() {
    		return descFonction;
    	}
    	public void setDescFonction(String descFonction) {
    		this.descFonction = descFonction;
    	}
    	public String getHoraireAfaire() {
    		return horaireAfaire;
    	}
    	public void setHoraireAfaire(String horaireAfaire) {
    		this.horaireAfaire = horaireAfaire;
    	}
    	public String getHoraireFaite() {
    		return horaireFaite;
    	}
    	public void setHoraireFaite(String horaireFaite) {
    		this.horaireFaite = horaireFaite;
    	}
    	public String getObservation() {
    		return observation;
    	}
    	public void setObservation(String observation) {
    		this.observation = observation;
    	}
    	public Integer getIdSemaine() {
    		return idSemaine;
    	}
    	public void setIdSemaine(Integer idSemaine) {
    		this.idSemaine = idSemaine;
    	}
    	public String getNomAbsence() {
    		return nomAbsence;
    	}
    	public void setNomAbsence(String nomAbsence) {
    		this.nomAbsence = nomAbsence;
    	}
    	public Time getDebutHoraire() {
    		return debutHoraire;
    	}
    	public void setDebutHoraire(Time debutHoraire) {
    		this.debutHoraire = debutHoraire;
    	}
    	public Time getFinHoraire() {
    		return finHoraire;
    	}
    	public void setFinHoraire(Time finHoraire) {
    		this.finHoraire = finHoraire;
    	}
    	public String getTypeHoraire() {
    		return typeHoraire;
    	}
    	public void setTypeHoraire(String typeHoraire) {
    		this.typeHoraire = typeHoraire;
    	}
    	public String getLibelleJour() {
    		return libelleJour;
    	}
    	public void setLibelleJour(String libelleJour) {
    		this.libelleJour = libelleJour;
    	}
    	public Integer getNumeroSemaine() {
    		return numeroSemaine;
    	}
    	public void setNumeroSemaine(Integer numeroSemaine) {
    		this.numeroSemaine = numeroSemaine;
    	}
    	public String getRoulementSem() {
    		return roulementSem;
    	}
    	public void setRoulementSem(String roulementSem) {
    		this.roulementSem = roulementSem;
    	}
    	public Date getDateModif() {
    		return dateModif;
    	}
    	public void setDateModif(Date dateModif) {
    		this.dateModif = dateModif;
    	}
    	public Date getDateDebutSem() {
    		return dateDebutSem;
    	}
    	public void setDateDebutSem(Date dateDebutSem) {
    		this.dateDebutSem = dateDebutSem;
    	}
    	public Date getDateFinSem() {
    		return dateFinSem;
    	}
    	public void setDateFinSem(Date dateFinSem) {
    		this.dateFinSem = dateFinSem;
    	}
    	public SemaineDisplay(String nomUnite, String nomService, String nom,
    			String prenom, String descFonction, String horaireAfaire,
    			String horaireFaite, String observation, Integer idSemaine,
    			String nomAbsence, Time debutHoraire, Time finHoraire,
    			String typeHoraire, String libelleJour, Integer numeroSemaine,
    			String roulementSem, Date dateModif, Date dateDebutSem,
    			Date dateFinSem) {
    		super();
    		this.nomUnite = nomUnite;
    		this.nomService = nomService;
    		this.nom = nom;
    		this.prenom = prenom;
    		this.descFonction = descFonction;
    		this.horaireAfaire = horaireAfaire;
    		this.horaireFaite = horaireFaite;
    		this.observation = observation;
    		this.idSemaine = idSemaine;
    		this.nomAbsence = nomAbsence;
    		this.debutHoraire = debutHoraire;
    		this.finHoraire = finHoraire;
    		this.typeHoraire = typeHoraire;
    		this.libelleJour = libelleJour;
    		this.numeroSemaine = numeroSemaine;
    		this.roulementSem = roulementSem;
    		this.dateModif = dateModif;
    		this.dateDebutSem = dateDebutSem;
    		this.dateFinSem = dateFinSem;
    	}
     
    }
    Et la méthode contenant la requête HQL est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public List<SemaineDisplay> getListSemaineDisp() {
     
    		List<SemaineDisplay> listSemaineDisp = new ArrayList<SemaineDisplay>();
     
    		String queryString =
    				"select new com.maison.enfant.gestion.horaire.display.SemaineDisplay(unite.nomUnite, service.nomService, personne.nom, personne.prenom, " 
    						+" fonction.descFonction, compteur.horaireAfaire, "
    						+" compteur.horaireFaite, compteur.observation, semaine.idSemaine, absence.nomAbsence, jour.debutHoraire, "
    						+" jour.finHoraire, jour.typeHoraire, jour.libelleJour, semaine.numeroSemaine, semaine.roulementSem, "
    						+" semaine.dateModif, semaine.dateDebutSem, semaine.dateFinSem ) "
    						+" from Unite as unite , Uniteservice as uniteservice, Service as service, Personne as personne, Droit as droit, Fonction as fonction, "
    						+ "Userlogin as userlogin,  Perssemainecompt as perssemainecompt, Jour as jour, Semaine as semaine,  Absence as absence, Compteur as compteur "
    						+" where unite.idUnite = uniteservice.unite.idUnite and uniteservice.service.idService = service.idService "
    						+" and service.idService = personne.service.idService and personne.droit.idDroit = droit.idDroit "
    						+" and personne.fonction.idFonction = fonction.idFonction and personne.userlogin.idUser = userlogin.idUser "
    						+" and personne.idPersonne = perssemainecompt.personne.idPersonne and perssemainecompt.jour.idJour = jour.idJour"
    						+" and perssemainecompt.semaine.idSemaine = semaine.idSemaine and semaine.idSemaine = jour.semaine.idSemaine"
    						+" and jour.absence.idAbsence = absence.idAbsence and perssemainecompt.compteur.idCompteur = compteur.idCompteur" ;
     
    		listSemaineDisp = this.getHibernateTemplate().find(queryString);
     
    		return listSemaineDisp;
    	}
    Pouvez m'indiquer ceux qui cause cette exception ? Je ne vois d'où elle provient d'autant plus que tout les attributs composant le super objet SemaineDisplay.java est une copie des éléments présent dans le select de la requête...

    Merci pour touts ^^

    PS: la différence qu'il peut résulter et que d'un coté il y a des Integer et de l'autre des int

  3. #23
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour, il te manque un constructeur vide dans ta classe SemaineDisplay.
    La règle c'est de toujours en mettre un vide quand tu en as défini un autre avec des paramètres.

  4. #24
    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 pour votre réponse. J'ai rajouté le constructeur vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public SemaineDisplay() {
    		super();
    	}
    Mais le message d'erreur est toujours le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Unable to locate appropriate constructor on class [com.maison.enfant.gestion.horaire.display.SemaineDisplay] [select new com.maison.enfant.gestion.horaire.display.SemaineDisplay(unite.nomUnite, service.nomService, personne.nom, personne.prenom, fonction.descFonction, compteur.horaireAfaire, compteur.horaireFaite, compteur.observation, semaine.idSemaine, absence.nomAbsence, jour.debutHoraire, jour.finHoraire, jour.typeHoraire, jour.libelleJour, semaine.numeroSemaine, semaine.roulementSem, semaine.dateModif, semaine.dateDebutSem, semaine.dateFinSem ) from com.maison.enfant.gestion.horaire.entitybeans.Unite as unite , com.maison.enfant.gestion.horaire.entitybeans.Uniteservice as uniteservice, com.maison.enfant.gestion.horaire.entitybeans.Service as service, com.maison.enfant.gestion.horaire.entitybeans.Personne as personne, com.maison.enfant.gestion.horaire.entitybeans.Droit as droit, com.maison.enfant.gestion.horaire.entitybeans.Fonction as fonction, com.maison.enfant.gestion.horaire.entitybeans.Userlogin as userlogin, com.maison.enfant.gestion.horaire.entitybeans.Perssemainecompt as perssemainecompt, com.maison.enfant.gestion.horaire.entitybeans.Jour as jour, com.maison.enfant.gestion.horaire.entitybeans.Semaine as semaine, com.maison.enfant.gestion.horaire.entitybeans.Absence as absence, com.maison.enfant.gestion.horaire.entitybeans.Compteur as compteur where unite.idUnite = uniteservice.unite.idUnite and uniteservice.service.idService = service.idService and service.idService = personne.service.idService and personne.droit.idDroit = droit.idDroit and personne.fonction.idFonction = fonction.idFonction and personne.userlogin.idUser = userlogin.idUser and personne.idPersonne = perssemainecompt.personne.idPersonne and perssemainecompt.jour.idJour = jour.idJour and perssemainecompt.semaine.idSemaine = semaine.idSemaine and semaine.idSemaine = jour.semaine.idSemaine and jour.absence.idAbsence = absence.idAbsence and perssemainecompt.compteur.idCompteur = compteur.idCompteur]

  5. #25
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    peux-tu nous montrer le code de la methode
    et de la methode Merci.

  6. #26
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new com.maison.enfant.gestion.horaire.display.SemaineDisplay(unite.nomUnite, service.nomService, personne.nom, personne.prenom, fonction.descFonction, compteur.horaireAfaire, compteur.horaireFaite, compteur.observation, semaine.idSemaine, absence.nomAbsence, jour.debutHoraire, jour.finHoraire, jour.typeHoraire, jour.libelleJour, semaine.numeroSemaine, semaine.roulementSem, semaine.dateModif, semaine.dateDebutSem, semaine.dateFinSem )
    Il te manque un constructeur avec cette signature je pense.

Discussions similaires

  1. [HQL] Requête SQL Native à mettre en HQL ou Criteria
    Par Igname dans le forum Hibernate
    Réponses: 2
    Dernier message: 20/11/2014, 00h01
  2. Conversion d'une requête SQL au HQL
    Par Fatemy dans le forum Hibernate
    Réponses: 0
    Dernier message: 24/08/2011, 04h11
  3. Convertir une requête SQL en requête HQL
    Par akharraz dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/05/2011, 23h42
  4. Réponses: 2
    Dernier message: 24/08/2006, 11h02
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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