Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Petr Fejfar


Ahoj,

potreboval bych postrcit, jak napsat JPQL:

* mam entitu AppUser s 1:M asociaci na entitu Subscription
  (V PostgreSQL to udelalo vazebni tabulku)
* mam entitu History

a potreboval bych z History vybrat vsechny zaznamy
pro daneho uzivatele s nejakou vlastnosti ze Subscription.

V SQL bych napsal takhle:

  select
h.xxx,h.yyy,...
  from
history as h
  inner join subscription s
on h.vlastnost=s.vlastnost
  inner join basalwebuser_subscription l
on s.id=l.subscriptions_id
  inner join basalwebuser u
on u.id=l.basalwebuser_id
  where
u.id=?
  order by ...


Pouzivam JPA+Hibernate. Jak mam dostat to
ON h.vlastnost=s.vlastnost do JPQL?


Diky, pf




Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Rastislav Siekel

Ahoj,

v JPQL neviem, ale pred týždňom sme tu niečo podobné riešili v 
Hibernate. Je to v manuáli v 14.3 - jedná sa o WITH clause v HQL.


Príklad:
/from Cat as cat
   left join cat.kittens as kitten
   *with *kitten.bodyWeight  10.0/

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


Petr Fejfar wrote:


Ahoj,

potreboval bych postrcit, jak napsat JPQL:

* mam entitu AppUser s 1:M asociaci na entitu Subscription
  (V PostgreSQL to udelalo vazebni tabulku)
* mam entitu History

a potreboval bych z History vybrat vsechny zaznamy
pro daneho uzivatele s nejakou vlastnosti ze Subscription.

V SQL bych napsal takhle:

  select
h.xxx,h.yyy,...
  from
history as h
  inner join subscription s
on h.vlastnost=s.vlastnost
  inner join basalwebuser_subscription l
on s.id=l.subscriptions_id
  inner join basalwebuser u
on u.id=l.basalwebuser_id
  where
u.id=?
  order by ...


Pouzivam JPA+Hibernate. Jak mam dostat to
ON h.vlastnost=s.vlastnost do JPQL?


Diky, pf




maven2 + jaxb?

2009-09-21 Tema obsahu Dusan Zatkovsky
Ahoj.

Nez sa psychicky totalne vycerpany uchylim k napisaniu primitivneho shell 
scriptu, poradte prosim, ako (ktory plugin) mam pouzit pre jaxb do mavenu.

Google nasiel viac pluginov, z ktorych jeden zarucene nefunguje (The 
plugin 'com.sun.tools.xjc.maven2:maven-jaxb-plugin' does not exist or no 
valid version could be found), ostatne maju bud obsolete howto (neexistujuce 
repozitare), alebo su tazkopadne (primitivne).


OT:

Zacinam byt z toho pekne nasrany, pretoze od prechodu na maven nerobim nic 
ine, len copy-pastujem z roznych pochybnych webov a blogov rozne fragmenty 
xml kodu s mizernou dokumentaciou a k samotnemu vyvoju sa obrazne povedane 
dostavam dost zriedka :-) Nehovoriac o fakte, ze za konfiguraky v xml by som 
obecne vrazdil.


Diky

-- 
Dusan


Re: maven2 + jaxb?

2009-09-21 Tema obsahu Petr Prochazka
2009/9/21 Dusan Zatkovsky msk.c...@gmail.com

 Ahoj.

 Nez sa psychicky totalne vycerpany uchylim k napisaniu primitivneho shell
 scriptu, poradte prosim, ako (ktory plugin) mam pouzit pre jaxb do mavenu.

 Google nasiel viac pluginov, z ktorych jeden zarucene nefunguje (The
 plugin 'com.sun.tools.xjc.maven2:maven-jaxb-plugin' does not exist or no
 valid version could be found), ostatne maju bud obsolete howto
 (neexistujuce
 repozitare), alebo su tazkopadne (primitivne).


Ja pouzivam 
org.codehaus.mojo:jaxb2-maven-pluginhttp://mojo.codehaus.org/jaxb2-maven-plugin/



 OT:

 Zacinam byt z toho pekne nasrany, pretoze od prechodu na maven nerobim nic
 ine, len copy-pastujem z roznych pochybnych webov a blogov rozne fragmenty
 xml kodu s mizernou dokumentaciou a k samotnemu vyvoju sa obrazne povedane
 dostavam dost zriedka :-) Nehovoriac o fakte, ze za konfiguraky v xml by
 som
 obecne vrazdil.


Je pravda, ze nektere pluginy maji malou, obcas i nulovou, dokumentaci. Ale
zatim jsem si vystacil s oficialnimi pluginy od Apachu (
http://maven.apache.org/plugins/) a nebo od Codehausu (
http://mojo.codehaus.org/plugins.html).
Co se tyka XML konfiguracu, kam se na to hrabe Ant, to se neda srovnat :-).



 Diky

 --
 Dusan



Petr Prochazka


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Petr Fejfar
Dne Mon, 21 Sep 2009 09:45:16 +0200 Rastislav Siekel sie...@prosoft.sk  
napsal/-a:



Ahoj,

v JPQL neviem, ale pred týždňom sme tu niečo podobné riešili v
Hibernate. Je to v manuáli v 14.3 - jedná sa o WITH clause v HQL.


Nedari se mi. Pridal jsem do Subcsription jeste obracenou
@ManyToOne asociaci user a sesmolil:

  select count(*) from History as hist
inner join Subscription as subs
  with hist.vlastnost=subs.vlastnost
inner join subs.user as user
  with user.id=?

Na to HQL parser vyhazuje exception: Path expected for join!

Dalsi varianta se stejnym vysledkem byla:


  select count(*) from History as hist
inner join Subscription as subs
  with hist.vlastnost=subs.vlastnost and subs.user_id=?


A neuspel jsem, ani kdyz jsem tomu primo zadal ten
rano cistovany a odzkouseny SQL command - tam si stezuje
pro zmenu JDBCExceptionReporter:

  Sloupec pojmenovaný id nebyl nalezen v ResultSet.


Nevidi nekdo, co delam spatne?


Diky, pf


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Rastislav Siekel
Presne tak, ako je urobená tá duhá väzba - ...join *subs.*user..., tak 
musí byť aj tá prvá. Takže nie ...join Subscription... ale ... join 
*hist.*Subscription Inak Hibernate nemá ako zistiť definíciu toho 
JOIN-u.


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


Petr Fejfar wrote:
Dne Mon, 21 Sep 2009 09:45:16 +0200 Rastislav Siekel 
sie...@prosoft.sk napsal/-a:



Ahoj,

v JPQL neviem, ale pred týždňom sme tu niečo podobné riešili v
Hibernate. Je to v manuáli v 14.3 - jedná sa o WITH clause v HQL.


Nedari se mi. Pridal jsem do Subcsription jeste obracenou
@ManyToOne asociaci user a sesmolil:

  select count(*) from History as hist
inner join Subscription as subs
  with hist.vlastnost=subs.vlastnost
inner join subs.user as user
  with user.id=?

Na to HQL parser vyhazuje exception: Path expected for join!

Dalsi varianta se stejnym vysledkem byla:


  select count(*) from History as hist
inner join Subscription as subs
  with hist.vlastnost=subs.vlastnost and subs.user_id=?


A neuspel jsem, ani kdyz jsem tomu primo zadal ten
rano cistovany a odzkouseny SQL command - tam si stezuje
pro zmenu JDBCExceptionReporter:

  Sloupec pojmenovaný id nebyl nalezen v ResultSet.


Nevidi nekdo, co delam spatne?


Diky, pf


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Petr Fejfar
Dne Mon, 21 Sep 2009 16:10:04 +0200 Rastislav Siekel sie...@prosoft.sk  
napsal/-a:



Presne tak, ako je urobená tá duhá väzba - ...join *subs.*user..., tak
musí byť aj tá prvá. Takže nie ...join Subscription... ale ... join
*hist.*Subscription Inak Hibernate nemá ako zistiť definíciu toho
JOIN-u.


No jo, ale ja zadnou hist.subscription nemam...
hist je legacy tabulka plnena non-Java strojem
a v Jave jsem ji jen napsal standalone entitu.

A ted bych potreboval udelat nejaky jeji run-time
join pres vazbu hist.vlastnost=subs.vlastnost,
jako mi to funguje v obycejnem SQL

Znamena to, ze to bez doplneni stare tabulky
o vazbu @ManyToOne nejde?

A proc mi nejde to odzkousene SQL te nenapada?


Diky, pf


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Rastislav Siekel

Ahoj,


No jo, ale ja zadnou hist.subscription nemam...
hist je legacy tabulka plnena non-Java strojem
a v Jave jsem ji jen napsal standalone entitu.

A ted bych potreboval udelat nejaky jeji run-time
join pres vazbu hist.vlastnost=subs.vlastnost,
jako mi to funguje v obycejnem SQL

Znamena to, ze to bez doplneni stare tabulky
o vazbu @ManyToOne nejde?
Presne tak. (Len pre istotu - nedopĺňaš väzbu do tabuľky, len do jej 
mapovania. Žiadna fyz. väzba tam byť nemusí.)

A proc mi nejde to odzkousene SQL te nenapada?
To bude asi niečo triviálne - v mapovaní existuje h.id, ale v tom 
SELECT-e nie je v select-liste, alebo niečo podobné.


Bedo.

P.S. Len na okraj - nemaž z mailu pôvodné texty - je to rýchlejšie ako 
pozerať sa do starých mailov, aký vlastne bol pôvodný SQL... :-)


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Petr Fejfar
Dne Mon, 21 Sep 2009 17:11:15 +0200 Rastislav Siekel sie...@prosoft.sk  
napsal/-a:




Znamena to, ze to bez doplneni stare tabulky
o vazbu @ManyToOne nejde?

Presne tak. (Len pre istotu - nedopĺňaš väzbu do tabuľky, len do jej
mapovania. Žiadna fyz. väzba tam byť nemusí.)


No tak tomu prestavam rozumet:

 * puvodne jsem mel @OneToMany AppUser.subscription,
   coz fyzicky udelalo join table user_subscription s id zazanmu

 * kdyz jsem doplnil @ManyToOne Subscription.user abych mel
   obousmernou asociaci, tak  mi to fyzicky pridalo foreign key
   do tabulky subscription, i kdyz by nemelo/nemuselo,
   protoze vse potrebne ma v te join table

 * kdyz jsem zkousel vnutit mu tu existujici join table
   jejim specifikovanim pomoci @JoinTable, tak hbm2ddl
   narazil na nejake FK constraints - nevim, co s tou tabulkou
   join table chtel udelat, tak jsem prozatim rezignoval
   a nechal tam ten FK.





A proc mi nejde to odzkousene SQL te nenapada?

To bude asi niečo triviálne - v mapovaní existuje h.id, ale v tom
SELECT-e nie je v select-liste, alebo niečo podobné.


To je mozne, ale nic takoveho nevidim. Vsude pouzivam kvalifikovane
odkazy s aliasy tabulek a result set mam:

  sql.append(select h.*);




P.S. Len na okraj - nemaž z mailu pôvodné texty - je to rýchlejšie ako
pozerať sa do starých mailov, aký vlastne bol pôvodný SQL... :-)



To slysim/ctu poprve - vetsinou se chce, aby se psalo bez nabodenicek
a quotovalo. U toho bych zustal, ale priste tam ten SQL sam znovu
zkopiruju.

Diky, pf


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Jan Dosoudil

Ahoj,
je nutné používat u obousměrných relací mappedBy=, v tabulce AppUser 
má být:

@OneToMany(mappedBy=appUser)
Subscription subscription;

v Subscription:
@ManyToOne
AppUser appUser;

Pokud se nepoužije mappedBy, vytvářejí se duplicitní vazby, které již 
existují.


On 21.9.2009 17:26, Petr Fejfar wrote:

Dne Mon, 21 Sep 2009 17:11:15 +0200 Rastislav Siekel sie...@prosoft.sk
napsal/-a:



Znamena to, ze to bez doplneni stare tabulky
o vazbu @ManyToOne nejde?

Presne tak. (Len pre istotu - nedopĺňaš väzbu do tabuľky, len do jej
mapovania. Žiadna fyz. väzba tam byť nemusí.)


No tak tomu prestavam rozumet:

* puvodne jsem mel @OneToMany AppUser.subscription,
coz fyzicky udelalo join table user_subscription s id zazanmu

* kdyz jsem doplnil @ManyToOne Subscription.user abych mel
obousmernou asociaci, tak mi to fyzicky pridalo foreign key
do tabulky subscription, i kdyz by nemelo/nemuselo,
protoze vse potrebne ma v te join table

* kdyz jsem zkousel vnutit mu tu existujici join table
jejim specifikovanim pomoci @JoinTable, tak hbm2ddl
narazil na nejake FK constraints - nevim, co s tou tabulkou
join table chtel udelat, tak jsem prozatim rezignoval
a nechal tam ten FK.





A proc mi nejde to odzkousene SQL te nenapada?

To bude asi niečo triviálne - v mapovaní existuje h.id, ale v tom
SELECT-e nie je v select-liste, alebo niečo podobné.


To je mozne, ale nic takoveho nevidim. Vsude pouzivam kvalifikovane
odkazy s aliasy tabulek a result set mam:

sql.append(select h.*);




P.S. Len na okraj - nemaž z mailu pôvodné texty - je to rýchlejšie ako
pozerať sa do starých mailov, aký vlastne bol pôvodný SQL... :-)



To slysim/ctu poprve - vetsinou se chce, aby se psalo bez nabodenicek
a quotovalo. U toho bych zustal, ale priste tam ten SQL sam znovu
zkopiruju.

Diky, pf


Re: Zacatecnicky dotaz jak dostat do JPQL inner join on...

2009-09-21 Tema obsahu Petr Fejfar
Dne Mon, 21 Sep 2009 17:32:02 +0200 Jan Dosoudil  
jan-k...@dosoudil.chr.cz napsal/-a:


je nutné používat u obousměrných relací mappedBy=, v tabulce AppUser  
má být:

@OneToMany(mappedBy=appUser)
Subscription subscription;

v Subscription:
@ManyToOne
AppUser appUser;

Pokud se nepoužije mappedBy, vytvářejí se duplicitní vazby, které již  
existují.


Tak jsem to takhle udelal a kdyz jsem dropnul DB a nechal ji
znovu vytvorit, tak zrusil tu join table a do Subscription
strcil FK, cili ted to vypada, jak kdybych si ten DDL delal
rucne :-)


Diky za pomoc, pf