2016-05-12 14 views
1

Ich versuche, die folgende SQL-Abfrage mit der JPA Criteria APIJPA Kriterien: in Klausel mit vielen Spalten

SELECT * FROM Table1 a 
WHERE (a.category, a.priority) IN (
SELECT a1.category, max(a1.priority) FROM Table1 a1 GROUP BY a1.category 
) 

Funktionell zu schreiben, die Abfrage wählen Sie das Element der Tabelle 1 mit der höchsten Priorität für jede Kategorie.

categoryPriority = // defines the pair category/priority 
mySubQuery = // defines the subquery 
query.where(categoryPriority.in(mySubQuery) 

Dies ist schematisch, was ich suche.

Die Definition der Unterabfrage ist kein Problem, da sie gut dokumentiert ist.

Aber ich finde keine Möglichkeit, das Paar zu definieren (a.category, a.priority).

Antwort

3

Mehrere Spalten in einem IN-Klausel sind in JPA nicht vorgesehen. Ich denke, Sie müssten eine native Abfrage verwenden.

Referenz: query for select which multiple values in the “IN” clause

+2

Vielen Dank für Ihre Antwort. Da ich keine nativen Abfragen verwenden möchte, habe ich den Teil der vielen Spalten durch eine hässliche Verkettung des Werts der Spalten Kategorie und Priorität ersetzt, aber ich bin etwas enttäuscht. –