Napríklad Hibernate s Oracle 10 po nastavení:
/Query.setFirstResult(x);
Query.setMaxResults(y);
/
vygeneruje SQL:
select
*
from
( select
row_.*,
rownum rownum_
from
( select
alias1_.column1,
alias1_.column2,
....
alias1_.columnN,
from
<TABLE> alias1_ ) row_
where
rownum <= ?
)
where
rownum_ > ?
To je asi presne to, čo chcete.
Rastislav "Bedo" Siekel
------------------------------------------------------------------------
Ing. Rastislav Siekel
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
E-mail : <[email protected]> <mailto:[email protected]>
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20
On 11. 3. 2010 13:37, Lukas Barton wrote:
Hibernate to dela - metoda *setMaxResults*
Ale nemusi to chodit na vsech DB, zalezi na konkretnim dialektu -
jeste nedavno to neumel pro MS SQL v kombinaci s *setFirstResult*.
Z tech dialektu se da vykoukat konkretni SQL implementace pro dane
databaze.
Lukas
2010/3/11 Oto Buchta <[email protected] <mailto:[email protected]>>
Zdravím,
mám tabulku o milionech záznamů, kde primárním klíčem je long, ale
nejedná se o seqenci.
Dívám se po generickém nástroji, který by mi vrátil pouze N záznamů s
nejvyšším indexem menším než nějaké X,
tedy umí něco, co by se mělo v JDBC řešit takto:
Connection.prepareStatement("select * from tabulka where klic<X order
by klic desc").setMaxRows(N);
Jenomže toto je na řešeno na straně JDBC driveru, nikoli na straně
databáze. Když to chci udělat databázovým strojem,
musím to řešit pro každou DB zvlášť:
Oracle: select * from tabulka where klic<X and rownum=N order by
klic desc
MySQL: select * from tabulka where klic<X order by klic desc limit 1,N
Znáte takový generický nástroj, popřípadě dokážete poradit, jak
nastavit Hibernate či iBatis či cokoli jiného, aby mi tuto službu
poskytlo?
Já ne a kamarád Gůgl taky nenapověděl.
Dík moc,
--
Oto 'tapik' Buchta, [email protected] <mailto:[email protected]>,
http://tapikuv.blogspot.com