Ano, dekuji, privedlo me to k reseni v Hibernate.

Oproti tomu reseni s UNIONem jsem mel obavu, jak vyplni databaze polozku PES_JMENO, pokud odpovidajiciho psa nenajde. Ale nastesti doplni logicky null.

V HQL skutecne je obdoba left outer joins, takze oproti puvodni verzi, kterou jsem zde zverejnil:

"select Osoba osoba order by pes.jmeno"

nyni funguje spravne (resp. resi muj problem) tato:

"select osoba from Osoba osoba left join osoba.pes as pes order by pes.jmeno"

U me (PostgreSQL) jsou polozky s null na konci.

Taky me napada, ze by se mozna nekde dalo toto chovani pri vyberech (left join pro ziskani vnorene tridy) nastavit jako standardni. Stacil by pak ten puvodni HQL zapis a hlavne - nemusel bych jich desitky prepisovat...

Petr Gola

On 05/09/06, Ondřej Fafejta KYBERIE <[EMAIL PROTECTED]> wrote:
Petr Gola wrote:
> Potreboval bych bud dokopat Hibernate k tomu aby to ten prikaz
> prevedlo na:
>
> select
>   osoba1.id <http://osoba1.id > as OSOBA_ID,
>   osoba1.pes_id as PES_ID,
>   pes1.jmeno AS PES_JMENO
> from
>   tabulka_osoba osoba1,
>   tabulka_pes pes1
> where
>   osoba1.PES_ID = pes1.id <http://pes1.id>
>
> union
>
> select
>   osoba1.id <http://osoba1.id> as OSOBA_ID,
>   osoba1.pes_id as PES_ID,
>   null as PES_JMENO
> from
>   tabulka_osoba osoba1,
> where osoba1.PES_ID IS NULL
>
> order by PES_JMENO
>
Pro čisté sql je lepší použít LEFT JOIN místo UNION.


select
  osoba1.id <http://osoba1.id> as OSOBA_ID,
  osoba1.pes_id as PES_ID,
  pes1.jmeno as PES_JMENO
from
  tabulka_osoba osoba1
LEFT JOIN tabulka_pes pes1 ON pes1.id=osoba1.pes_id
order by pes1.nazev


LEFT JOIN způsobí to, že se zobrazí i ty osoby, u kterých pes vůbec
neexistuje (je NULL).

Nastává zde ovšem problém s tím, zda se NULL řádky zobrazí první a nebo
poslední - viz. jak psal S. Ošmera.

Jinak tuším, že hibernate má také LEFT JOIN (ale nejsem si jistý).

Fafi


Odpovedet emailem