-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 
Author Message
 Post subject: Lecture des données de 2 tables avec Jointures
PostPosted: Mon Mar 17, 2008 12:29 pm 
Newbie

Joined: Mon Mar 10, 2008 2:00 pm
Posts: 10
Hibernate version: 3.0

JAVA Strus

Database: SQL Server

Bonjour,

Toujours dans l'utilisation des jointures j'ai un problème avec la lecture des enregistrements de 2 tables.

Jusque la dans mon application je récupère les informations d'une table en fesant une requête de type :

uneRequete = this.session.createQuery("From Salarie where ResponsableSalarie=?");
uneRequete.setString(0, idResponsable);
Collection listeSalarie = uneRequete.list();

Donc cela fonctionne sans problème après dans ma page JSP j'ai plus qu'a agir comme avec une collection d'objet "Salarie". (ce que finalement me renvoie la requête)

Mais lorsque je fais une jointure de type:

uneRequete = this.session.createQuery("Select ob, sal From Salarie as sal, Objectif as ob inner join ob.salarie Where ob.salarie.Id=?")
uneRequete.setString(0, idResponsable);
Collection listeSalarieObjectif = uneRequete.list();

il me renvoi alors une collection d'objet "Salarie" et d'objet "Objectif", mais la par contre je n'arrive pas exploiter correctement les données...

Quelqu'un a une idée?

Merci pour tout aide!!


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 17, 2008 1:47 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
tu dois ou bien faire un join type "theta" ou bien un "inner join", mais pas une mélange des deux.

Code:
select a, b from A, B where A.a=B.b

ou bien
Code:
select a, b from A inner join B on A.a=B.b


mas pas

Code:
select A, B inner join ...



forme correcte:

Code:
Select ob, sal
From Salarie sal inner join Objectif ob on ob.salarie=sal.[salaire???]
Where ob.salarie.Id=?

_________________
Gonzalo Díaz


Top
 Profile  
 
 Post subject:
PostPosted: Mon Mar 17, 2008 2:28 pm 
Newbie

Joined: Mon Mar 10, 2008 2:00 pm
Posts: 10
Alors j'ai essayer ta méthode mais il ne reconnait pas la syntaxe que tu donnes...

J'ai essayer de modifier pour adapter à ton idée mais il ne semble pas l'accepter.

Pourtant je pense que ma requête d'origine n'est pas mauvaise, mon seul problème est que je ne sais pas comment je dois la lire pour récupérer à la fois les informations de mon objet Salarie et de mon objet Objectif...

je me suis demandé si je ne devais pas faire autre chose que :

unRequete.list()...


En tout cas merci pour ton aide!


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 7:27 am 
Newbie

Joined: Mon Mar 10, 2008 2:00 pm
Posts: 10
Personne n'a une idée?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 7:44 am 
Beginner
Beginner

Joined: Thu Jan 31, 2008 6:35 am
Posts: 27
Je ne comprends pas ce que tu attends comme résultat pour cette requete..

Si tu veux une liste de Salarie et d'Objectif sans liens il faut faire 2 requetes.

Sinon fait une requete qui retroune les objectifs et utilise la navigation java pour avoir le salarie

od.getSalarie().


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 9:30 am 
Newbie

Joined: Mon Mar 10, 2008 2:00 pm
Posts: 10
Oui je me suis surement mal exprimer...je travaille avec struts

Jusque la j'ai eu juste besoin de lister les salariés donc je faisais la requête suivante :

uneRequete = this.session.createQuery("From Salarie");
uneRequete.setString(0, idSalarie);
Collection listeSalarie = uneRequete.list();

ensuite j'affectais ma Collection objectifSalarie à la session :

session.setAttribute("listeSalarie ", listeSalarie );

et dans ma page JSP j'avais plus qu'a lister les salaries comme ceci:

<logic:iterate name="listeSalarie " id="unSalarie">
<bean:write name="unSalarie" property="nom"/>
<bean:write name="unSalarie" property="prenom"/>
</logic:iterate>

Sauf que maintenant je voudrais récupérer à la fois les informations de mon Salarie et ses objectifs rattachés et donc les lister...

Avec ma requête précédente selon ne fonctionne pas parce qu'il ne reconnait pas les propriété "property du bean envoyé à la JSP...

Donc bon après avoir passé pas mal de temps sur le net j'ai l'impression que je suis le seul a vouloir faire ça...donc cela ne doit surement pas être la bonne solution...

Donc si personne n'a de solution il va falloir que je continue à réfléchir...

Merci pour ton aide en tout cas!!!


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 10:17 am 
Beginner
Beginner

Joined: Thu Jan 31, 2008 6:35 am
Posts: 27
Oui tu es le seul à vouloir le faire parce que c'est mal. ;)

Dans ce cas je conseil l'utilisation du design pattern ValueObject.
C'est à dire que dans ta transaction hibernate tu utilises tes objets persistés et en dehors des passe-plats.

Code:
uneRequete = this.session.createQuery("From Salarie");
uneRequete.setString(0, idSalarie);
Collection listeSalarie = uneRequete.list();

Collection<SalarieVo> listeSalarieVO = new ArrayList<SalarieVo>();
for(Salarie s : listeSalarie) {
  SalarieVO sVO = s.getVO();
  sVO.setObjectif(s.getObjectif().getVO);
  listeSalarieVO.add(sVO);
}



Il y a une autre solution en utilisant le lazy loading (regarde la doc, il faut déclarer ton asso lazy) mais je continue à conseiller le design pattern.


N'oublie jamais que ton objet n'est pas traité de la meme facon dans la transaction et en dehors.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 10:51 am 
Newbie

Joined: Mon Mar 10, 2008 2:00 pm
Posts: 10
Merci de me prévenir!!! ;-)

Je vais donc m'intéresser de plus prés au design pattern ValueObject.
Je reviendrais vers le Forum si jamais je n'arrive pas à l'utiliser...

Merci pour ton aide!!!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.