Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel
 odkazu na mastera,
 nastavením řazení a
 query.setMaxResults(1)?
 

  ing.


Jiří Švarc
  Programmer


  Analyst
   
  Asseco


Central Europe, a.s.
  Solutions for Demanding
  Business
  Budějovická


  778/3a, 140 00 Praha 4
  Czech Republic
  Mobile: +420 737 944 536
jiri.sv...@asseco-ce.com
www.asseco-ce.com

 

  
From:
konference-boun...@java.cz
[mailto:konference-boun...@java.cz]
On Behalf Of Rastislav
Siekel
Sent: Thursday, June 27, 2013
2:57 PM
    To: Java
Subject: 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 
  
  


  


  

  


  

  

  
  


  



Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Lukas
Denormalizujte schema a mate po problemu.

  Lukas


Sent from Samsung Mobile

 Original message 
From: Rastislav Siekel sie...@prosoft.sk 
Date:  
To: Java konference@java.cz 
Subject: Re: Hibernate SELECT bez FROM tabuľky 
 
Vďaka za názor, ale príkaz

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE 
detail.master_id = master.id AND detail.sloupce  konec)

vyberie všetky záznamy Master, pretože ku každému existuje nejaký   detail, 
ktorý hovorí, že oprava nie je ukončená - prvý detail. Mňa zaujíma atribút 
ukončenie len na poslednom detaile.

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 27. 6. 2013 18:44, Petr Franta wrote:
Myslím si, že by to mělo jít vyřešit pomocí podmínky exists nebo not exists:

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE 
detail.master_id = master.id AND detail.sloupce  konec)

Nebo něco podobného.

Petr

2013/6/27 Rastislav Siekel sie...@prosoft.sk
Možno som to nenapísal úplne jasne - skúsim inak

Mám záznamy o oprave - hlavičky, a ku každej môže byť 1 - N detailov (priebeh 
opravy, na poslednej je aj prípadne ukončenie).
Vytváram SELECT pre zoznam opráv, ktoré ešte nemajú koniec, t.j. s podmienkou, 
či posledný detail ešte nemá zadaný koniec (tie predošlé ho určite nemajú 
zadaný, takže obyčajný JOIN by mi vybral všetky opravy, lebo ku každému master 
existuje určite aspoň jeden detail, ktorý vyhovuje podmienke).

posledný detail zistím v SQL tak ako som uviedol nižšie.

Rastislav Bedo Siekel


P.S.


From detail d where d.master=:master order by d.order
Tento príkaz vypíše pre 1 master všetky detaily, čo určite nie je to, čo hľadám.



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 27. 6. 2013 16:11, Martin Beránek wrote:
Není moc jasné zadání, ale hql

From detail d where d.master=:master order by d.order

Podle mě dělá co požadujete

Martin

Dne 27.6.2013 15:36 Rastislav Siekel sie...@prosoft.sk napsal(a):
Otočiť to na vyhľadávanie detail JOIN   master by v 
tomto prípade nešlo. Výsledok má   byť zoznam mastrov 
(filtrovaný na ďalšie podmienky) s tým, že sú zadané podmienky aj na
   posledný detail.

Principiálne hľadám, či je možné v Hibernate spraviť SELECT * FROM( SELECT...)


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 27. 6. 2013 15:11, ŠVARC Jiří wrote:
Nevím jestli jsem dobře porozuměl, ale nešlo by to realizovat vyhledáním v 
seznamu detailů s kritériem odkazu na mastera, nastavením řazení a 
query.setMaxResults(1)?

 

ing. Jiří Švarc
Programmer Analyst

 

Asseco Central Europe, a.s.
Solutions for Demanding Business

Budějovická 778/3a, 140 00 Praha 4
Czech Republic
Mobile: +420 737 944 536
jiri.sv...@asseco-ce.com
www.asseco-ce.com

 

From: konference-boun...@java.cz [mailto:konference-boun...@java.cz] On Behalf 
Of Rastislav Siekel
Sent: Thursday, June 27, 2013 2:57 PM
To: Java
Subject: 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









Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Miroslav Paulfranc
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 (mailto:sie...@prosoft.sk) 
Tel : 041/562 54 91 
Fax : 041/562 54 97 
Mobil : 0905 34 00 20 







Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel

  
  
Toto som asi presne nepochopil. Čo sa
  dá denormalizovať na master-detail väzbe, keď hľadám posledný
  detail?
  
  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:24, Lukas wrote:


  
  Denormalizujte schema a mate po problemu.
  
  
    Lukas
  
  
  
  
  
Sent from Samsung
  Mobile
  
  
  
  
   Original message 
  From: Rastislav Siekel sie...@prosoft.sk 
  Date: 
  To: Java konference@java.cz 
  Subject: Re: Hibernate SELECT bez FROM tabuľky 
  
  
  Vďaka za názor, ale príkaz

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail
  WHERE detail.master_id = master.id AND
  detail.sloupce  konec)

vyberie všetky záznamy Master, pretože ku každému existuje
nejaký detail, ktorý hovorí, že oprava nie je ukončená - prvý
detail. Mňa zaujíma atribút ukončenie len na poslednom detaile.

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 27. 6. 2013 18:44, Petr Franta wrote:
  
  Myslím si, že by to mělo jít vyřešit pomocí podmínky
"exists" nebo "not exists":

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE
detail.master_id = master.id AND detail.sloupce
 konec)

Nebo něco podobného.

Petr

2013/6/27 Rastislav Siekel sie...@prosoft.sk
  

  Možno som to nenapísal úplne jasne - skúsim inak

Mám záznamy o oprave - hlavičky, a ku každej môže byť 1
- N detailov (priebeh opravy, na poslednej je aj
prípadne ukončenie).
Vytváram SELECT pre zoznam opráv, ktoré ešte nemajú
koniec, t.j. s podmienkou, či posledný detail ešte nemá
zadaný koniec (tie predošlé ho určite nemajú zadaný,
takže obyčajný JOIN by mi vybral všetky opravy, lebo ku
každému master existuje určite aspoň jeden detail, ktorý
vyhovuje podmienke).

posledný detail zistím v SQL tak ako som uviedol nižšie.

Rastislav "Bedo" Siekel


P.S.

  
  From detail d where d.master=:master order by
d.order

Tento príkaz vypíše pre 1 master všetky detaily, čo
určite nie je to, čo hľadám.

  

   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 27. 6. 2013 16:11, Martin Beránek
wrote:
  

  
  

  
Není moc jasné zadání, ale hql
From detail d where d.master=:master order by
  d.order
Podle mě dělá co požadujete
Martin
Dne 27.6.2013 15:36
  "Rastislav Siekel" sie...@prosoft.sk


  napsal(a):
  

  Otočiť to na vyhľadávanie "detail JOIN
master" by v tomto prípade nešlo. Výsledok
má byť zoznam mastrov (filtrovaný na ďalšie
podmienky) s tým, že sú zadané podmienky aj
na posledný detail.

Principiálne hľadám, či je možné

Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel
   
From:
konference-boun...@java.cz
[mailto:konference-boun...@java.cz]
On Behalf Of Rastislav

Siekel
Sent: Thursday,
June 27, 2013 2:57 PM
To: Java
            Subject:
    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 
  
  


  


  

  


  

  

  
  


  

  

  
  


  



Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel

  
  
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 
  
  
  

  

  


  



Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel

  
  
Aj som predpokladal, či nebolo myslené
  takéto niečo.
  
  Áno, fungovalo by to, ale ostatná funkcionalita by sa tomu musela
  prispôsobiť. Teraz sa do záznamu značí kto a kedy ho menil a ešte
  ide po každej zmene aj do iného systému na nejaký postprocesing -
  to všetko by sa muselo ošetriť. Ten VIEW bude jednoduchší...
  
  
  Inak vďaka všetkým za názor. Ešte nám konferencia žije - aj keď už
  zrejme všetci všetko vedia, keď je tak málo príspevkov :-)
  
  
  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 12:55, Lukas Barton wrote:


  Ulozit do master tabulky ID posledniho detailu nebo i jeho stav.

  Lukas


2013/6/28 Rastislav Siekel sie...@prosoft.sk:

  
Toto som asi presne nepochopil. Čo sa dá denormalizovať na master-detail
väzbe, keď hľadám posledný detail?


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:24, Lukas wrote:

Denormalizujte schema a mate po problemu.

  Lukas


Sent from Samsung Mobile



 Original message 
From: Rastislav Siekel sie...@prosoft.sk
Date:
To: Java konference@java.cz
Subject: Re: Hibernate SELECT bez FROM tabuľky


Vďaka za názor, ale príkaz

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE
detail.master_id = master.id AND detail.sloupce  konec)

vyberie všetky záznamy Master, pretože ku každému existuje nejaký detail,
ktorý hovorí, že oprava nie je ukončená - prvý detail. Mňa zaujíma atribút
ukončenie len na poslednom detaile.

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 27. 6. 2013 18:44, Petr Franta wrote:

Myslím si, že by to mělo jít vyřešit pomocí podmínky "exists" nebo "not
exists":

SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE
detail.master_id = master.id AND detail.sloupce  konec)

Nebo něco podobného.

Petr

2013/6/27 Rastislav Siekel sie...@prosoft.sk


  
Možno som to nenapísal úplne jasne - skúsim inak

Mám záznamy o oprave - hlavičky, a ku každej môže byť 1 - N detailov
(priebeh opravy, na poslednej je aj prípadne ukončenie).
Vytváram SELECT pre zoznam opráv, ktoré ešte nemajú koniec, t.j. s
podmienkou, či posledný detail ešte nemá zadaný koniec (tie predošlé ho
určite nemajú zadaný, takže obyčajný JOIN by mi vybral všetky opravy, lebo
ku každému master existuje určite aspoň jeden detail, ktorý vyhovuje
podmienke).

posledný detail zistím v SQL tak ako som uviedol nižšie.

Rastislav "Bedo" Siekel


P.S.


From detail d where d.master=:master order by d.order
Tento príkaz vypíše pre 1 master všetky detaily, čo určite nie je to, čo
hľadám.




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 27. 6. 2013 16:11, Martin Beránek wrote:

Není moc jasné zadání, ale hql

>From detail d where d.master=:master order by d.order

Podle mě dělá co požadujete

Martin

Dne 27.6.2013 15:36 "Rastislav Siekel" sie...@prosoft.sk napsal(a):

  

Otočiť to na vyhľadávanie "detail JOIN master" by v tomto prípade nešlo.
Výsledok má byť zoznam mastrov (filtrovaný na ďalšie podmienky) s tým, že sú
zadané podmienky aj na posledný detail.

Principiálne hľadám, či je možné v Hibernate spraviť SELECT * FROM(
SELECT...)


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 27. 6. 2013 15:11, ŠVARC Jiří wrote:

Nevím jestli jsem dobře porozuměl, ale nešlo by to realizovat vyhledáním
v seznamu detailů s kritériem odkazu na mastera,  nastavením řazení a
query.setMaxResults(1)?



ing. Jiří Švarc
Programmer Analyst



Asseco Central Europe, a.s.
Solutions for Demanding Business

Budějovická 778/3a, 140 00 Praha 4
Czech Republic
Mobile: +420 737 944 536
jiri.sv...@asseco-ce.com
www.asseco-ce.com



From: konference-boun...@java.cz [mailto:konference-boun...@java.cz] On
Behalf Of Rastislav Siekel
Sent: Thursday, June 27, 2013 2:57 PM
To: Java
Subject: Hibernate SELECT bez FROM tabuľky



Zdravím vospolok,

Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Miroslav Paulfranc
Jestli vám vadí vyloženě to, že dostanete kolekci místo objektu (napr. kvuli
pouzivani gener. pojo objektu v jsf, velocity sablonach apod.), 
tak pokud to máte tímto způsobem dělané všude,
můžete generovat pojo objekty tak, že generované třídy budou dědit z třídy, 
kde bude metoda pro natažení prvního prvku kolekce a zároveň budete 
generovat předky vámi napsané třídy.

Tj. 

Třída použitá jako předek pro generované objekty:
==
class Predek {

 protected Object  getFirstObjectFromCollection(Collection col){
 /** vratit prvni objekt jak potrebujete - staci jen  col.iterator().next();
*/
 }
}

==
generovana trida 

class ZaznamMasterBase {
  
...
 
 public SetZaznamData getZaznamDatas(){
...
}

}

==
vami napsany potomek

class Zaznam {


/** tohle je jediny kod, ktery musite doplnit rucne, jinak se pri zmene vse 
generuje beznym zpusobem **/
public ZaznamData getZaznam(){
return  (ZaznamData getFirstObjectFromCollection( getZaznamDatas() );
}

}

Tento zpusob pak pouzivam nejak takhle:



DetachedCriteria criteria = DetachedCriteria.forClass(Zaznam.class);
criteria.createAlias(zaznamDatas, zaznamData, DetachedCriteria.LEFT_
JOIN);
criteria.createAlias(zaznamData.vt, stav, DetachedCriteria.LEFT_JOIN);

/** pokud chci napr. nejaky objekt, na ktery odkazujue zaznamData - napr 
stav  */
criteria.createAlias(zaznamData.stav, stav, DetachedCriteria.LEFT_JOIN);

add(Restrictions.isNull(zaznamData.vt)); //aktualni zaznam validTo = null

Pak napr..
 ListZaznam zaznam = (ListZaznam) getHibernateTemplate().findByCriteria
(criteria);

v tu chvili  pouzije jeden jednoduchy sql dotaz, jehoz vysledkem bude seznam
z master tabulky s aktualnimi daty vcetne stavu.

V iteraci se pak da volat 

zaznam.getZaznamData().getStav()... 

Takhle se da pracovat i s objekty a hbm. mapovanim generovanym z databaze 
(tj. bez moznosti zasahovat do hbm mapovani).
Pokud se dodrzi urcita jmena konvence, da se podminka na aktualni data dat 
nekam do predka a pak staci jen neco jako kod nize.

Vyber aktualnich zaznamu KpDatCloseDate vcetne dalsich referencovanych 
objektu vypada napr. takhle:

ExtendedDetachedCriteria criteria = ExtendedDetachedCriteria.forClass
(KpDatCloseDate.class);
criteria.includeObject(perioda);
criteria.includeObject(spolecnost);

spousteny generovany sql dotaz je pak velmi jednoduchy a je jen jeden










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



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 (mailto: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(mailto: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ť

Hibernate SELECT bez FROM tabuľky

2013-06-27 Tema obsahu Rastislav Siekel

  
  
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 



  

  



RE: Hibernate SELECT bez FROM tabuľky

2013-06-27 Tema obsahu ŠVARC Jiří
Nevím jestli jsem dobře porozuměl, ale nešlo by to realizovat vyhledáním v 
seznamu detailů s kritériem odkazu na mastera,  nastavením řazení a  
query.setMaxResults(1)?

ing. Jiří Švarc
Programmer Analyst

Asseco Central Europe, a.s.
Solutions for Demanding Business
Budějovická 778/3a, 140 00 Praha 4
Czech Republic
Mobile: +420 737 944 536
jiri.sv...@asseco-ce.commailto:jiri.sv...@asseco-ce.com
www.asseco-ce.comhttp://www.asseco-ce.com

From: konference-boun...@java.cz [mailto:konference-boun...@java.cz] On Behalf 
Of Rastislav Siekel
Sent: Thursday, June 27, 2013 2:57 PM
To: Java
Subject: 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 mailto:sie...@prosoft.sk
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20




Re: Hibernate SELECT bez FROM tabuľky

2013-06-27 Tema obsahu Rastislav Siekel

  
  
Otočiť to na vyhľadávanie "detail JOIN
  master" by v tomto prípade nešlo. Výsledok má byť zoznam mastrov
  (filtrovaný na ďalšie podmienky) s tým, že sú zadané podmienky aj
  na posledný detail.
  
  Principiálne hľadám, či je možné v Hibernate spraviť SELECT *
  FROM( SELECT...)
  
  
  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 27. 6. 2013 15:11, ŠVARC Jiří wrote:


  
  
  
  
  
Nevím
jestli jsem dobře porozuměl, ale nešlo by to realizovat
vyhledáním v seznamu detailů s kritériem odkazu na mastera,
 nastavením řazení a  query.setMaxResults(1)?
 

  ing.
Jiří Švarc
  Programmer
  Analyst
   
  Asseco
Central Europe, a.s.
  Solutions for Demanding Business
  Budějovická
  778/3a, 140 00 Praha 4
  Czech Republic
  Mobile: +420 737 944 536
jiri.sv...@asseco-ce.com
www.asseco-ce.com

 

  
From:
konference-boun...@java.cz
[mailto:konference-boun...@java.cz] On Behalf Of Rastislav
Siekel
Sent: Thursday, June 27, 2013 2:57 PM
To: Java
    Subject: 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 
  
  


  


  



Re: Hibernate SELECT bez FROM tabuľky

2013-06-27 Tema obsahu Rastislav Siekel

  
  
Možno som to nenapísal úplne jasne -
  skúsim inak
  
  Mám záznamy o oprave - hlavičky, a ku každej môže byť 1 - N
  detailov (priebeh opravy, na poslednej je aj prípadne ukončenie).
  Vytváram SELECT pre zoznam opráv, ktoré ešte nemajú koniec, t.j. s
  podmienkou, či posledný detail ešte nemá zadaný koniec (tie
  predošlé ho určite nemajú zadaný, takže obyčajný JOIN by mi vybral
  všetky opravy, lebo ku každému master existuje určite aspoň jeden
  detail, ktorý vyhovuje podmienke).
  
  posledný detail zistím v SQL tak ako som uviedol nižšie.
  
  Rastislav "Bedo" Siekel
  
  
  P.S.
  
  From detail d where d.master=:master order by d.order
  Tento príkaz vypíše pre 1 master všetky detaily, čo určite nie je
  to, čo hľadám.
  
  

 
   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 27. 6. 2013 16:11, Martin Beránek wrote:


  Není moc jasné zadání, ale hql
  From detail d where d.master=:master order by d.order
  Podle mě dělá co požadujete
  Martin
  Dne 27.6.2013 15:36 "Rastislav Siekel"
sie...@prosoft.sk
napsal(a):

  
Otočiť to na vyhľadávanie "detail JOIN master" by v
  tomto prípade nešlo. Výsledok má byť zoznam mastrov
  (filtrovaný na ďalšie podmienky) s tým, že sú zadané
  podmienky aj na posledný detail.
  
  Principiálne hľadám, či je možné v Hibernate spraviť
  SELECT * FROM( SELECT...)
  
  
  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 27. 6. 2013 15:11, ŠVARC Jiří wrote:


  
Nevím

jestli jsem dobře porozuměl, ale nešlo by to
realizovat vyhledáním v seznamu detailů s kritériem
odkazu na mastera,  nastavením řazení a
 query.setMaxResults(1)?
 

  ing.

Jiří Švarc
  Programmer

  Analyst
   
  Asseco

Central Europe, a.s.
  Solutions for Demanding Business
  Budějovická

  778/3a, 140 00 Praha 4
  Czech Republic
  Mobile: +420 737 944 536
jiri.sv...@asseco-ce.com
www.asseco-ce.com

 

  
From:
konference-boun...@java.cz
[mailto:konference-boun...@java.cz]
On Behalf Of Rastislav Siekel
Sent: Thursday, June 27, 2013 2:57 PM
To: Java
            Subject: 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ť?
  

Re: Hibernate SELECT bez FROM tabuľky

2013-06-27 Tema obsahu Martin Beránek
Není moc jasné zadání, ale hql

From detail d where d.master=:master order by d.order

Podle mě dělá co požadujete

Martin
Dne 27.6.2013 15:36 Rastislav Siekel sie...@prosoft.sk napsal(a):

  Otočiť to na vyhľadávanie detail JOIN master by v tomto prípade nešlo.
 Výsledok má byť zoznam mastrov (filtrovaný na ďalšie podmienky) s tým, že
 sú zadané podmienky aj na posledný detail.

 Principiálne hľadám, či je možné v Hibernate spraviť SELECT * FROM(
 SELECT...)


 Rastislav Bedo Siekel


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



  On 27. 6. 2013 15:11, ŠVARC Jiří wrote:

  Nevím jestli jsem dobře porozuměl, ale nešlo by to realizovat vyhledáním
 v seznamu detailů s kritériem odkazu na mastera,  nastavením řazení a
  query.setMaxResults(1)?

 ** **

 *ing. Jiří Švarc**
 *Programmer Analyst

  

 *Asseco Central Europe, a.s.**
 *Solutions for Demanding Business

 Budějovická 778/3a, 140 00 Praha 4
 Czech Republic
 Mobile: +420 737 944 536
 jiri.sv...@asseco-ce.com
 www.asseco-ce.com

 ** **

 *From:* konference-boun...@java.cz 
 [mailto:konference-boun...@java.czkonference-boun...@java.cz]
 *On Behalf Of *Rastislav Siekel
 *Sent:* Thursday, June 27, 2013 2:57 PM
 *To:* Java
 *Subject:* 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 sie...@prosoft.sk
 Tel : 041/562 54 91
 Fax : 041/562 54 97
 Mobil : 0905 34 00 20