Flexible Queries mit optionalen Parametern, Spring, JPA, PostgrSQL

Nurox

Mitglied
Hallo zusammen, ich stehe vor einem kleinen Problem und vielleicht habt ihr eine Lösung.
Derzeit arbeite ich an einer Java EE Applikation und verwende Spring, JPA und eine PostgreSQL Datenbank.

Ich habe zwei Tables, in einer stehen Personen und es gibt über eine PersonenID eine OneToMany Verbindung mit z.B. Kleidung.

Nun möchte ich Queries schreiben mit optionalen Parametern, für nicht optionale Parameter ist das ja einfach mit dem JPArepository und findByFirstnameAnd....
Bei optionalen Parametern ist das dann aber nicht mehr ganz so einfach, man kann ja nicht einfach hunderte Methoden schreiben und dann schauen welche man braucht. Ich habe also QueryDSL verwendet und war zuerst auch sehr zufrieden, wenn ich nach Personen in der PersonenTabelle suche geht das sehr gut. Ich kann ja mit dem Booleanbuilder und if abfragen optionale Parameter ausschließen.. Wenn ich nun aber damit auch in der anderen Tabelle suchen möchte kommt die PersonenID ja mehrfach for. Es kann also sein, dass Person mit der ID 1 Mehrere Jacken hat das könnte dann so aussehen
Code:
ID(PK) | PersonID | Jacke   | Farbe  | Größe
=================================================
1      |1         |Nike     |schwarz |XL
2      |1         |ADIDAS   |gelb    |L
3      |1         |ADIDAS   |blau    |XL
4      |2         |ETIREL   |grün    |S
5      |2         |ADIDAS   |blau    |S
Wenn ich nun mit QueryDSL nach einer Person suche, welche eine Jacke von Nike in der Farbe gelb und Größe XL hat wird mir Person 1 ausgegeben weil er nicht Zeile für Zeile durchsucht sondern alle Einträge in den Spalten für eine Person und bei Person 1 gibt es ja eine Jacke von Nike eine Farbe gelb und die Größe XL aber eben nicht in Kombination. QueryDSL kann das scheinbar nicht.
Wenn ich speziell in dieser Tabelle suche also nicht über die OneToMany Verbindung kann ich zwar nach einer Eigenschaft suchen aber wenn dann eben noch ein optionaler Parameter hinzukommt geht es nicht mehr weil er wenn ich speziell in der Tabelle suche nach der ID geht und nicht mehr nach der PersonenID (ich hoffe ihr versteht ;) )

Ich Suche also eine Möglichkeit, wie ich einfach und elegant flexible Queries schreiben kann mit optionalen Parametern. Am Ende habe ich einfach mehrere Auswahlkriterien, von denen ich aber nicht immer alle auswählen muss, wenn ich etwas leer lasse muss das Query flexibel sein.
 

Neue Themen


Oben