# JPQL- Query über mehrere Tabellen



## dschuebel (29. Nov 2016)

Hallo zusammen, ich bin noch absoluter Anfänger im Bereich JavaEE und komme bei der Query über mehrere Tabellen per JPQL einfach nicht weiter. 
Ich habe 2 Tabellen:
Bewerbung: ben_id|arbeit_id|zulassung
Benutzer: id|name|punkte|schnitt
Nun würde ich gerne eine Liste nach arbeit_id erzeugen, bei der die Benutzerdaten ausgegeben werden und diese nach Punkte und Schnitt sortiert werden.

Mein Versuch war:

```
@NamedQuery(name="Liste", query="SELECT a FROM Bewerbung b JOIN b.benutzer a WHERE b.arbeit = :id AND b.zulassung = false ORDER BY a.punkte DESC, a.schnitt")
```
Leider funktioniert das so nicht, allerdings habe ich das joinen per JPQL auch noch nicht so richtig verstanden


----------



## Nuiton (29. Nov 2016)

Hast du deine Query mal in der Konsole getestet?


----------



## dschuebel (29. Nov 2016)

Ich habe eine SQL-Abfrage in der Konsole getestet, dass hat einwandfrei funktioniert. Dann habe ich die Query entsprechend umgeschrieben in JPQL.


----------



## JCODA (30. Nov 2016)

sollte es "b.arbeit_id" statt "b.arbeit" in dem Query heißen?


----------



## stg (30. Nov 2016)

> [das] funktioniert (..) so nicht


 ist keine Fehlerbeschreibung, mit der wir was anfangen können. Beschreibe das Verhalten, was du erwartest und was stattdessen passiert. Sofern eine Exception geworfen wird, poste den gesamten (!) Stacktrace.
Außerdem brauchen wir das Mapping, welches du definiert hast, sowie den Code, in welchem den Query absetzt.
Zudem wäre es sinnvoll zu erwähnen, nach welcher Version der JPA Spec. du arbeitest und gegebenenfalls, welche Implementierung du verwendest.
Dein Query selbst sieht jedenfalls syntaktisch erst mal in Ordnung aus. Genau kann man das aber erst sagen, wenn man das Mapping dazu sieht.


----------



## MattElg (4. Dez 2016)

Lasse mir immer per System.out.println... die SQL Anweisung ausgeben, dann sieht man schnell wo der Fehler ist. Oder man kopiert diess und probiert sie in mySQL direkt, dann bekommt man die Fehler von mySQL angezeigt, sind hilfreicher, als eine Exception.


----------



## stg (5. Dez 2016)

MattElg hat gesagt.:


> Lasse mir immer per System.out.println... die SQL Anweisung ausgeben, dann sieht man schnell wo der Fehler ist. Oder man kopiert diess und probiert sie in mySQL direkt, dann bekommt man die Fehler von mySQL angezeigt, sind hilfreicher, als eine Exception.



Es gibt nirgends einen Hinweis darauf, dass er MySQL verwendet.
Logging mit Sysout ist grundsätzlich eine doofe Idee. Die großen JPA Implementierungen haben auch alle ein gescheites Logging eingebaut, über das man sich bei Bedarf auch alle abgesetzten SQL statements ausgeben lassen kann.
Und zu den Exceptions: Hängt wohl auch vom Programmierer ab, ob dieser in der Lage ist Exceptions richtig zu lesen und zu interpretieren. Pauschal zu sagen, dass die Fehlermeldungen vom DBMS hilfreicher seien, ist, naja, nicht sehr weit gedacht. Zum einen werden die Fehlermeldungen vom DBMS gewrappt und zum anderen kommt es möglicherwise gar nicht erst dazu, dass dort ein Fehler geschmissen wird, weil das Problem auch früher oder später angesiedelt sein kann.


----------



## Thallius (5. Dez 2016)

stg hat gesagt.:


> Es gibt nirgends einen Hinweis darauf, dass er MySQL verwendet.
> Logging mit Sysout ist grundsätzlich eine doofe Idee. Die großen JPA Implementierungen haben auch alle ein gescheites Logging eingebaut, über das man sich bei Bedarf auch alle abgesetzten SQL statements ausgeben lassen kann.
> Und zu den Exceptions: Hängt wohl auch vom Programmierer ab, ob dieser in der Lage ist Exceptions richtig zu lesen und zu interpretieren. Pauschal zu sagen, dass die Fehlermeldungen vom DBMS hilfreicher seien, ist, naja, nicht sehr weit gedacht. Zum einen werden die Fehlermeldungen vom DBMS gewrappt und zum anderen kommt es möglicherwise gar nicht erst dazu, dass dort ein Fehler geschmissen wird, weil das Problem auch früher oder später angesiedelt sein kann.



Mal ganz davon abgesehen, dass das bei preparedStatements nicht funktioniert.

Gruß

Claus


----------

