Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[mysql] Hibernate query

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

kzit hier al een paar dagen vast op een query die ik wil omvormen naar een hibernate query. Nu de query die ik normaal zou uitvoeren is deze :

select * from programmatie p where p.film_id = (select f.film_id from film f, genre g, subgenre s where f.film_id = s.film_id and s.genre_id = g.genre_id and g.naam = "Actie")

nu wil ik deze dus uitvoern aan de hand van hibernate en moet ik deze dus omvormen naar hql. Het probleem is echter dat ik wat problemen heb met het aanroepen van collecties. Mijn mappingfiles werken naar behoren maar ik krijg toch maar niet de juiste query.
De bedoeling is dus dat ik alle voorstellingen krijg die een film spelen die van een bepaald genre is. de relatie tss film en genre is veel op veel en daarom zit er de tabel subgenre tussen(juist gemapped in hibernate, want wegschrijven lukt) Film heeft dus een collection(set) genres waarin dus objecten van het type Genre zitten.
Nu wil ik dit dus uitvoeren met een inner select ,kheb het al opgelost gekregen als ik het in java verder afhandel, maar het probleem is dan dat ik al mijn programmaties moet inlezen, wat dus niet realitisch is, en dus veel beter met een inner select kan gedaan worden. Enige probleem is dat ik er maar niet aan geraak :s

Iemand die mij hier wat bij verder kan helpen?? Zou heel plezant zijn want ik weet het niet echt meer.

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Verwijderd schreef op zondag 11 november 2007 @ 19:16:
Hi,

kzit hier al een paar dagen vast op een query die ik wil omvormen naar een hibernate query. Nu de query die ik normaal zou uitvoeren is deze :

select * from programmatie p where p.film_id = (select f.film_id from film f, genre g, subgenre s where f.film_id = s.film_id and s.genre_id = g.genre_id and g.naam = "Actie")
Kun je de query niet als volgt schrijven?
SQL:
1
2
3
4
5
6
7
8
9
select p.*
from programmatie p
inner join film f
    on f.film_id = p.film_id
inner join genre g
    on g.genre_id = f.genre_id
inner join subgenre s
    on s.film_id = f.film_id
where g.naam = 'Actie'
nu wil ik deze dus uitvoern aan de hand van hibernate en moet ik deze dus omvormen naar hql. Het probleem is echter dat ik wat problemen heb met het aanroepen van collecties. Mijn mappingfiles werken naar behoren maar ik krijg toch maar niet de juiste query.
Show me da mappings. :P Lasting HQL schrijven zonder mappings.

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

Topicstarter
ok :), sry , kzal ff die query van jou al eens uitproberen alst dan nog ni werkt ,plak ik hier wel ff m'n mapping file van film

Verwijderd

Topicstarter
wat dus eigenlijk mijn probleem is dat ik dus eigenlijk niet goed weet hoe ik van pak nu film, in een query de genres kan aanspreken. normaal zou ik zeggen Film f, dus f.genres, maar vermits dit een collection is geraak je daar zo niet aan(dus f.genres.naam = "actie" werkt al helemaal niet :))
En joins en inner selects zijn nooit mijn specialiteit geweest :p

Jij gebruikt btw in je query subgenre, wat hibernate dus niet kent volgens mij, want ik heb subgenre nooit gemapped omdat dit een tussentabel is(wat volgens onze docenten niet gemapped moet worden)

ik zou er dus in HQL simpelweg dit van maken ,maar dat werkt dus niet...

("from programmatie p where p.film =(from Film f where f.genres.naam = 'Actie'");
Het probleem situeert zich dus op die genres.naam, wat niet gaat omdat het een collection is , en sla me dood maar ik zou niet weten hoe daaromheen te werken

Edit : owja de mapping file van dit geval , ff vergete. :)


<set name="genres" table="subgenre" cascade="save-update">
<key column="film_id"/>
<many-to-many column="genre_id" class="model.Genre"/>
</set>

[ Voor 35% gewijzigd door Verwijderd op 11-11-2007 20:22 ]


  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 28-11 20:44
Je moet gewoon vanuit genre een relatie terugleggen richting film, dan kun je namelijk gewoon doen:

Java:
1
String query = "FROM film f, genre g WHERE f IN g.films AND g.naam = 'actie'";


:)

Last.fm
Films!