Wellicht een wat verwarrende topictitel maar ik zal het proberen uit te leggen. Ik heb twee tabellen. De eerste representeert een soort van tijdstip en heeft een one-to-many relatie met een tabel met metingen. Er zijn namelijk meerdere metingen voor een bepaald tijdstip. De tabel met metingen heeft dus een FK naar de Tijdstip-tabel. So far, so good. Daarnaast heeft de Tijdstip tabel ook een verwijzing naar de Meting tabel om aan te geven dat een meting een maximum waarde voor dat tijdstip is. Uiteindelijk moet er voor elk tijdstip (dus elke rij in de Tijdstip tabel) een maximum waarde zijn, en dus een verwijzing naar een Meting rij.
Nu zul je je wellicht afvragen waarom er voor deze vreemde structuur gekozen is en waarom maxima niet m.b.v. queries worden bepaald, maar dat is nu helaas niet het probleem
Het probleem is dat ik m.b.v. Hibernate Criteria API alle instanties uit de Meting tabel wil halen, die:
1) in een bepaalde periode zijn gedaan. Dit is makkelijk: de Tijdstip tabel heeft een veld waarop ik een BETWEEN kan doen.
2) die voor hun tijdstip het maximum waren. Ofwel, waar naar verwezen wordt door de "maximum_fk" column uit de Tijdstip tabel. Dit zijn uiteraard alleen tijdstippen die tevens aan 1) voldoen.
Omdat ik metingen wil ophalen, maak ik een criteria aan voor die class. Maar nu moet ik dus via de property "tijdstip" van de Meting tabel bij het bebehorende tijdstip komen voor 1) en vervolgens eisen dat ik alleen Metingen ophaal waarvoor 2) geldt. Dat laatste krijg ik met geen mogelijkheid voor elkaar.
Ben er van overtuigd dat het puur een denkfout m.b.t. het gebruik van Criteria is, want in plain SQL zou dit niet zo'n probleem moeten zijn. Alleen is de hele applicatie met Criteria opgezet, dus daar zou ik voor dit geval niet van af willen wijken.
Nu zul je je wellicht afvragen waarom er voor deze vreemde structuur gekozen is en waarom maxima niet m.b.v. queries worden bepaald, maar dat is nu helaas niet het probleem
Het probleem is dat ik m.b.v. Hibernate Criteria API alle instanties uit de Meting tabel wil halen, die:
1) in een bepaalde periode zijn gedaan. Dit is makkelijk: de Tijdstip tabel heeft een veld waarop ik een BETWEEN kan doen.
2) die voor hun tijdstip het maximum waren. Ofwel, waar naar verwezen wordt door de "maximum_fk" column uit de Tijdstip tabel. Dit zijn uiteraard alleen tijdstippen die tevens aan 1) voldoen.
Omdat ik metingen wil ophalen, maak ik een criteria aan voor die class. Maar nu moet ik dus via de property "tijdstip" van de Meting tabel bij het bebehorende tijdstip komen voor 1) en vervolgens eisen dat ik alleen Metingen ophaal waarvoor 2) geldt. Dat laatste krijg ik met geen mogelijkheid voor elkaar.
Ben er van overtuigd dat het puur een denkfout m.b.t. het gebruik van Criteria is, want in plain SQL zou dit niet zo'n probleem moeten zijn. Alleen is de hele applicatie met Criteria opgezet, dus daar zou ik voor dit geval niet van af willen wijken.
[ Voor 2% gewijzigd door Swinnio op 29-10-2008 09:00 . Reden: verduidelijking ]
If the world wouldn't suck, we'd all fall off