Hallo,
ich steh grad aufm Schlauch. Bestimmt bin ich nicht der erste, der vor folgender Problematik steht, aber ich find einfach nix (weder Google, noch Foren-Suche) :-(
Gegeben (alles vereinfacht):
Ein Datensatz hat eine unterschiedliche Anzahl an Attributen. Jedes Attribut hat einen Wert und ist von einer bestimmten Einheit, die einen Namen hat.
Z.B. Datensatz 1 besitzt zwei Attribute mit Attribut 1: 5 (value) Sulfur, und Attribut 2: 100 (value) Water
Folgende Klassen habe darauf basierend erstellt:
Dataset: enthält eine Liste mit Attributen
Attribute: enthält einen value und eine Unit
Unit: enthält einen Namen
Folgendes Datenbankschema wurde daraufhin erstellt:
Dataset: Dataset_ID
Attribute: Dataset_ID, Unit_ID, value
Unit: Unit_ID, name
Jetzt möchte ich gerne folgende Abfragen durchführen:
Gib mir alle Datensätze, bei denen Sulfur>5 ODER Water>100Hierfür verwende ich folgendes HQL Statement:
Code:
select distinct d from Dataset as d
join d.attributes a
where (a.unit.name = 'Sulfur' and a.double_value > 5)
or (a.unit.name = 'Water' and a.double_value > 100)
Das funktioniert :-)
Ich möchte aber auch gerne folgende Abfrage durchführen:
Gib mir alle Datensätze, bei denen Sulfur>5 UND Water>100Code:
select distinct d from Dataset as d
join d.attributes a
where (a.unit.name = 'Sulfur' and a.double_value > 5)
and (a.unit.name = 'Water' and a.double_value > 100)
Dieses Statement gibt jedoch eine leere Menge zurück. Wahrscheinlich weil die Klammern nicht beachtet werden?
Denn name = Sulfur and value > 5 and name = Water and value > 100 wäre dasselbe wie name = Sulfur and value > 100 and name = Water and value > 5 (wenn man keine Klammern beachtet) -> hierfür gibts natürlich keine Datensätze in der Datenbank.
Hat mir jemand einen Tipp (das würde mir völlig ausreichen :-))