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
|