-->
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.  [ 2 posts ] 
Author Message
 Post subject: Outer Joins (mit einer Bedingung) mit HQL
PostPosted: Wed Jun 29, 2005 9:04 am 
Newbie

Joined: Wed Jun 29, 2005 8:29 am
Posts: 2
Hallo,

ich suche Rat im Umgang mit folgendem Problem:

In meinem Anwendungsfall kann ein Geschäftspartner meiner kleinen Kundenverwaltung n Adressen aufweisen (d.h. er kann muss aber nicht über eine oder mehrere Adressen verfügen). Falls er aber mindestens eine Adresse hat, ist durch die Anwendung sichergestellt, dass genau eine Adresse ein Kennzeichen als Hauptadresse trägt.

Für meine Suche nach Partnern gelte nun, dass im Trefferfall nicht nur der Partner sondern auch die Daten seiner Hauptadresse zurückgegeben werden sollen.
Per SQL auf der DB kann ich das so umsetzen:

select * from partner p LEFT OUTER JOIN adresse a on p.id = a.partner_id AND a.hauptadresse_kz = 1
where p.id in (select distinct p.id from partner p, ... hier folgen die Suchkriterien die sich über die Partnertabelle und weiter Tabellen erstrecken können) order by ...

Allerdings gelingt es mir nicht, diese Abfrage mit der HQL abzusetzen. In der Hibernate Console gebe ich z.B. folgendes ein:
from PartnerBasisDTO perg left join fetch perg.adressen a AND a.hauptadresseKz = 1 where perg.id in (select distinct p.id from PartnerBasisDTO p join p.zuordnungenZuVe z where p.nameNormiert like 'muster%' and z.veId in (5)) order by perg.nameNormiert asc, perg.vornameNormiert asc

Folgender Fehler wird gemeldet: net.sf.hibernate.QueryException: fetch may not be used with scroll() or iterate() [from de.myprog.pam.common.dto.PartnerBasisDTO perg left join fetch perg.adressen a AND a.hauptadresseKz = 1 where perg.id in (select distinct p.id from de.myprog.pam.common.dto.PartnerBasisDTO p join p.zuordnungenZuVe z where p.nameNormiert like 'muster%' and z.veId in (5)) order by perg.nameNormiert asc, perg.vornameNormiert asc]

Setze ich die Einschränkung "AND a.hauptadresseKz = 1" nicht beim outer join sondern in die where-Klausel vor das order by entfallen mir die Treffer, die über keine Hauptadresse verfügen.

Wie kann ich das Problem lösen?

Ich verwendet dabei noch das Hibernate 2.1


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 29, 2005 11:03 am 
Newbie

Joined: Wed Jun 29, 2005 8:29 am
Posts: 2
einstweilen kann ich das Problem dadurch lösen/umgehen, indem ich die Einschränkung

"AND a.hauptadresseKz = 1"

an die where-Klausel vor das "order by" einfüge und um eine Abfrage auf is null ergänze

also

"AND (a.hauptadresseKz = 1 or a.hauptadresseKz is null) "


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 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.