Ahoj,

> Když vytahuju aktuální data, tahám primárně z tabulky master + DetachedCriteria.LEFT_JOIN  na data s podmínkou, že validTo = null (pro aktuální záznam) nebo s intervalem pro nějaký čas. Funguje to naprosto bez problému, vždy dostanu master záznam + kolekce detailu s jednou položkou dle požadovaného data (jedním sql dotazem).

To je ten problém - ...dostanu master záznam + kolekce detailu... - a potom podmienka na detail nie je podmienka na posledný detail ale na kolekciu detailov...

Rastislav "Bedo" Siekel



Ing. Rastislav Siekel
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
E-mail : <sie...@prosoft.sk>
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20



On 28. 6. 2013 9:48, Miroslav Paulfranc wrote:
Zdravím.
Pracuji s něčím velmi podobným.
Mám master tabulku s detaily, přičemž detail má rozsah platnosti (2 x čas) validFrom a validTo (asi souvisí s předchozí poznámkou o normalizaci).
Když vytahuju aktuální data, tahám primárně z tabulky master + DetachedCriteria.LEFT_JOIN  na data s podmínkou, že validTo = null (pro aktuální záznam) nebo s intervalem pro nějaký čas. Funguje to naprosto bez problému, vždy dostanu master záznam + kolekce detailu s jednou položkou dle požadovaného data (jedním sql dotazem).

Myslím, že to, co chcete přes Criteria API určitě nějak půjde.

Pokud by vám nevadilo trochu upravit hbm map. soubor, tak můžete udělat to samé s podmínkou pro konec, necháte řadit podle detail_time
a v mapování řeknete, že chcete v kolekci dotahovat pouze jednu položku, otázka je, jestli vám tohle omezení nebude vadit jinde (navíc je možné, že hib. bude generovat víc sql dotazů - asi min. 2, záleží i na fetch mode - select/join ).

M.P.


---------- Původní zpráva ----------
Od: Rastislav Siekel <sie...@prosoft.sk>
Datum: 27. 6. 2013
Předmět: Hibernate SELECT bez FROM tabuľky


Zdravím vospolok,

chcel by som sa spýtať, či niekto neriešil nasledujúci problém:

V Oracle mám tabuľky master a detail. Mám master a chcem k nemu nájsť posledný detail, čo spravím v SQL takto:

... AND detail_id =
(
    SELECT * FROM
    (
        SELECT detail_id
        FROM detail
        ORDER BY detail_time DESC
    )
    WHERE rownum = 1
)
...


Tu som narazil na problém, že Hibernate pomocou Criteria API asi nevie spraviť "SELECT FROM (...) WHERE ...".
Aj DetachedCriteria, aj Criteria si vyžadujú Entitu (DTO), nad ktorou pripravia SQL príkaz. Je nejaká možnosť ako toto obísť?

Vďaka,
Rastislav "Bedo" Siekel



Ing. Rastislav Siekel
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
E-mail : <sie...@prosoft.sk>
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20




Odpovedet emailem