Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel

  
  
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
 

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é v Hibernate
spraviť SELECT * FROM( SELECT...)

   

Re: Hibernate SELECT bez FROM tabuľky

2013-06-28 Tema obsahu Rastislav Siekel

  
  
Áno, tak som to nakoniec spravil - SQL
  VIEW cez 
  SELECT master JOIN detail ... WHERE detail_id IN (SELECT
  MAX(detail_id) KEEP (DENSE_RANK LIST ORDER BY time)...
  
  Pre hibernate to namapujem ako 1:1 a všetky podmienky na master aj
  detail tak budú úplne jednoduché. Súhlasím, že treba nechať na
  Hibernate len to jednoduché. Vždy to bude len podmnožina SQL
  možností...
  
  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:25, Petr Franta wrote:

Pak to asi stačí spojit s tím co posílal kolega
předemnou, asi nějak takto:
SELECT xyz FROM master WHERE exists (SELECT 1 FROM detail WHERE
detail.master_id = master.id
AND detail.sloupce  konec AND 
  detail.detail_id in (select min(detail_id) keep
(dense_rank first order by detail_time desc) from detail WHERE detail.master_id
  = master.id))
  , nebo s tím vaším sub-selectem. Je to asi spíš o
SQL (HQL).

Snad napoví:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#querycriteria-detachedqueries
nebo v HQL
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#queryhql-subqueries

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

  
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.
  

  

   

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,

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

V Oracle mám tabuľky master a 

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ť