2017-01-17 8 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)"; 

したがって、myTableにはMAX IDを取得してクエリに使用する必要がある列があります。JPAでサブクエリを実行できません

最後の行は私にエラーを与える:

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

これはJPQLまたはSQLですか? 'myTable'は実際にはJPQLの' MyEntity'(エンティティクラスの名前)でなければならないからです。 – SJuan76

+0

申し訳ありませんがjpql、あなたは正しいですエンティティクラスの名前は、私はちょうどその方法の名前を –

+0

これはあなたの質問では正確には、(適切な 'ORDER BY'句で)あなたが望む:http://stackoverflow.com/questions/6708085/select-top-1-result-using-jpa – SJuan76

答えて

3

それはあなたがミスを犯すように見えるのです。 スキーマにテーブルtがありますか?そうでなければ、エイリアスの代わりにテーブル名を指定する必要があります。

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

これはこれをしました。私は同じテーブルから選択をしようとしていたが、私はエイリアスをとにかく変更しなければならないと思う。 –

関連する問題