Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [hibernate] problème avec une reqûete en HQL qui utilise un 'map'

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[hibernate] problème avec une reqûete en HQL qui utilise un 'map'

n°1305902
bog-art
Posté le 15-02-2006 à 11:14:16  profilanswer
 

Voici un extrait des 2 fichiers 'hbm' concernés :
 
 
utilisateur.hbm.xml :  
 

<class name="UtilisateurVo" table="utilisateur">
    ...
    <map name="mapInfosEmploye" table="travail_dans_sous_agence" lazy="true">
      <key>
        <column name="tsag_societe_uti"/>
        <column name="tsag_code_personne"/>
      </key>
      <index-many-to-many class="fr.mdpa.referentiel.metier.agence.donnees.SousAgenceVo">
        <column name="tsag_societe"/>
        <column name="tsag_agt"/>
        <column name="tsag_s_agt"/>
      </index-many-to-many>
      <composite-element class="fr.mdpa.referentiel.metier.agence.donnees.InfosEmploye">
        <property name="geographique" column="tsag_geographique" type="string"/>
        <property name="responsable" column="tsag_responsable" type="string"/>
        <property name="production" column="tsag_production" type="string"/>
        <property name="parDefaut" column="tsag_par_defaut" type="string"/>
      </composite-element>
    </map>
    ...
</class>


 
agence.hbm.xml :
 

<class name="SousAgenceVo" table="sous_agence">
    ...
    <map name="mapInfosEmploye" table="travail_dans_sous_agence" lazy="true">
      <key>
        <column name="tsag_societe"/>
        <column name="tsag_agt"/>
        <column name="tsag_s_agt"/>
      </key>
      <index-many-to-many class="fr.mdpa.referentiel.metier.utilisateur.donnees.UtilisateurVo">
        <column name="tsag_societe_uti"/>
        <column name="tsag_code_personne"/>
      </index-many-to-many>
      <composite-element class="fr.mdpa.referentiel.metier.agence.donnees.InfosEmploye">
        <property name="geographique" column="tsag_geographique" type="string"/>
        <property name="responsable" column="tsag_responsable" type="string"/>
        <property name="production" column="tsag_production" type="string"/>
        <property name="parDefaut" column="tsag_par_defaut" type="string"/>
      </composite-element>
    </map>
    ...
  </class>


 
 
 
La requête utilisée est la suivante :
 

select distinct new fr.mdpa.referentiel.presentation.agence.vue.SousAgencePersonnelPo( utilisateur.pk.societe.pk.codeSociete, utilisateur.pk.codePersonne, utilisateur.nom, utilisateur.prenom, mapInfo.responsable, mapInfo.parDefaut, mapInfo.production, mapInfo.geographique)  
from UtilisateurVo utilisateur, SousAgenceVo sousAgence
join utilisateur.mapInfosEmploye mapInfo
where sousAgence in indices(mapInfo)
and sousAgence.pk.agenceAdministrative.pk.codeAgence = '0001'
and sousAgence.pk.codeSousAgence = 'B'


 
Le sql qui est généré est le suivant :

select distinct utilisateu0_.uti_societe as col_0_0_, utilisateu0_.uti_code_personne as col_1_0_, utilisateu0_.uti_nom as col_2_0_, utilisateu0_.uti_prenom as col_3_0_, mapinfosem2_.tsag_responsable as col_4_0_, mapinfosem2_.tsag_par_defaut as col_5_0_, mapinfosem2_.tsag_production as col_6_0_, mapinfosem2_.tsag_geographique as col_7_0_ from utilisateur utilisateu0_, travail_dans_sous_agence mapinfosem2_, sous_agence sousagence1_
where utilisateu0_.uti_societe=mapinfosem2_.tsag_societe_uti
and utilisateu0_.uti_code_personne=mapinfosem2_.tsag_code_personne
and ((sousagence1_.sag_societe, sousagence1_.sag_agt, sousagence1_.sag_s_agt) in (
 select mapinfosem2_.tsag_societe, mapinfosem2_.tsag_agt, mapinfosem2_.tsag_s_agt
 from travail_dans_sous_agence mapinfosem2_
 where utilisateu0_.uti_societe=mapinfosem2_.tsag_societe_uti
 and utilisateu0_.uti_code_personne=mapinfosem2_.tsag_code_personne)
)
and (sousagence1_.sag_agt = '0001')
and (sousagence1_.sag_s_agt = 'B')


 
 
Description du problème :  
- si le contenu de la base de donnée est :

codeSociete codeAgence codeSousAgence codePersonne nom prenom responsable parDefaut geographique Production
soc1  0002  0  1  nom1 prenom1 1  0  N  N
soc1  0001  B  1  nom1 prenom1 0  1  N  O
 
soc1  0004  A  2  nom2 prenom2 0  1  O  N
soc1  0003  A  2  nom2 prenom2 1  0  O  N
soc1  0005  O  2  nom2 prenom2 1  1  O  O
soc1  0001  B  2  nom2 prenom2 0  0  O  N
 
soc1  0001  B  3 nom3  prenom3 0  1  N  N
soc1  0006  0  3 nom3  prenom3 0  0  O  O
soc1  0006  A  3 nom3  prenom3 0  0  N  O


 
 
- le résultat de la requete ci-dessus est :

codeSociete codePersonne nom prenom responsable parDefaut geographique Production
soc1  1  nom1 prenom1 0  1  N  O
soc1  1  nom1 prenom1 1  0  N  N
 
soc1  2  nom2 prenom2 0  0  O  N
soc1  2  nom2 prenom2 0  1  O  N
soc1  2  nom2 prenom2 1  0  O  N
soc1  2  nom2 prenom2 1  1  O  O
 
soc1  3  nom3 prenom3 0  0  N  O
soc1  3  nom3 prenom3 0  0  O  O
soc1  3  nom3 prenom3 0  1  N  N


 
- résultat souhaité :

codeSociete codePersonne nom prenom responsable parDefaut geographique Production
soc1  1  nom1 prenom1 0  1  N  O
soc1  2  nom2 prenom2 0  0  O  N
soc1  3  nom3 prenom3 0  1  N  N


 
remarques :
- l'utilisateur est '1' est associé à 2 agences au total
- l'utilisateur est '2' est associé à 4 agences au total
- l'utilisateur est '3' est associé à 3 agences au total
 
il manque donc la jointure sur le codeSousAgence dans la requete (and mapinfosem2_.tsag_s_agt = sousagence1_.sag_s_agt).
 
Cependant, comment rajouter cette jointure dans la requête HQL ?
Existe-t-il une autre solution ?

mood
Publicité
Posté le 15-02-2006 à 11:14:16  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [hibernate] problème avec une reqûete en HQL qui utilise un 'map'

 

Sujets relatifs
[Hibernate]Filtrer une requete avec une methode javaKit graphique de ma création, problème.
Problème de KeyListener sur un JTextField[Résolu] Probleme listbox + onclick
[RESOLU]probleme avec zoom d'image inspiré des portes coulissantesproblème de connexion à une base de donnée
[HTML/CSS]Problème de positionment avec IE, trou de 1px[Struts + MySql] probleme pour acceder à la base de données
probleme ajoute d'un SHOUTBOX (chat) 
Plus de sujets relatifs à : [hibernate] problème avec une reqûete en HQL qui utilise un 'map'


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR