JPA Where Bedingung dynamisch basteln

A

Alex_1900

Gast
Hallo,

ich bin Anfänger bei JPA und frage mich ob es unter Verwendung von JPA möglich ist
eine Where bedingung dynamisch erstellen zu lassen.

Ich habe folgende Situation:
ich möchte eine Suche implementieren. Diese Suche hat viele Felder die alle optional sind.
Nun kann der Benutzer also nur ein Feld von Zehn füllen.

D.h. zb
FELD : Wert
Alter : 21
Name : null
Vorname : null
Stadt : null

Beim Erstellen der Query benötigt man ja einen QueryString.
Java:
String queryString = "SELECT* FROM PERSON WHERE alter = "+Person.ALTER+" AND name "+Person.NAME;
Query query = manager.createQuery(queryString);

Wenn ich diesen String erstelle und dann die Platzhalter so setze
Java:
query.setParameter(Person.ALTER, "hier kommt der eingegeben Wert von der UI"); //-->21
query.setParameter(Person.NAME, "hier kommt der eingegeben Wert von der UI");//-->null
...

Bekomme ich als Reinen SQL String folgendes :

SQL:
Select * FROM PERSON WHERE alter = 21 and name = null AND ...

Damit bekomme ich natürlich kein Ergebniss.
Ich möchte also eine dynamisch erstellte Where Bedingung die alle NULL Werte erst gar nicht in die Bedingung aufnimmt.

Gibt es da etwas dazu direkt von JPA oder muss ich soetwas selber implementieren?
 
A

Alex_1900

Gast
Vielen Dank maki,
Criteria API sieht viel versprechend aus.
Geht aber leider erst ab JPA 2.0 so wie ich das sehe.

Gibt es auch Lösungen für JPA 1.0?
 
M

maki

Gast
Welchen JPA Provider nutzt du denn (Hibernate, Eclipselink etc. pp.)?

Denke du wirst da direkt auf die Implementierung zurückgreifen und die JPA Abstraktion verlassen müssen.
 
A

Alex_1900

Gast
Ich verwende SAP JPA.

Selbst wenn diese Funktion nicht unter SAP JPA vorhanden ist, gibt es soetwas unter EclipseLink bzw. Hibernate?
 

Nogothrim

Aktives Mitglied
Ja, Hibernate hat auch eine recht gute Criteria API, die imho sogar lesbarer als die JPA2 Criteria API ist, aber nicht ganz so mächtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JPQL mit WHERE und LIKE funktioniert "manchmal"? Data Tier 2

Ähnliche Java Themen


Oben