2017-01-17 2 views
0
String query = "select t from myTable t where t.idOne = " + myId 
+ " AND t.idTwo = " + myIdTwo 
+ " AND t.idThree = " + myIdThree 
+ "AND t.idFour = (select max(t.idFour) from t)"; 

So hat myTable eine Spalte, wo ich brauche, um die MAX-ID aus und verwenden Sie es in der Abfrage tun.kann nicht Subqueries in JPA

Die letzte Zeile gibt mir eine Fehlermeldung:

Error while running query: An exception occurred while creating a query in EntityManager:
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Syntax error parsing [query from above]. [214, 214] An identification variable must be provided for a range variable declaration.

+1

Ist dies JPQL oder SQL? Weil 'myTable' in JPQL eigentlich' MyEntity' (der Name der Entity-Klasse) sein sollte. – SJuan76

+0

Tut mir leid, es ist jpql, du hast Recht, es ist der Name der Entity-Klasse, ich habe es so benannt –

+0

Das ist nicht genau das, was du in deiner Frage stellst, aber (mit der richtigen 'ORDER BY'-Klausel) bekommst du das Ergebnis das willst du: http://stackoverflow.com/questions/6708085/select-top-1-result-using-jpa – SJuan76

Antwort

3

Es ist aussehen wie Sie Fehler machen. Haben Sie Tabelle t in Ihrem Schema? Wenn nicht, sollten Sie den Tabellennamen anstelle des Alias ​​angeben.

String query = "select t from myTable t where t.idOne = " + myId 
+ " AND t.idTwo = " + myIdTwo 
+ " AND t.idThree = " + myIdThree 
+ "AND t.idFour = (select max(st.idFour) from myTable st)"; 
+0

Danke, das hat es getan. Ich habe versucht, aus der gleichen Tabelle zu wählen, aber ich denke, ich musste den Alias ​​sowieso ändern. –