2015-01-06 8 views
5

this questionに記載されているものと同様のケースがありますが、同じクエリが動作しますが、これをjpqlという名前で書き込もうとしますクエリ、エラーが発生しています。MAX(列名)、DISTINCTを別の列でSELECTする名前付きクエリ

マイクエリ:

@NamedQuery(
      name = "findRankingsBetween", 
      query = "SELECT rt FROM Rankingtable rt " + 
         "INNER JOIN " + 
          "(SELECT teamId, MAX(lastupdate) as MaxDateTime " + 
          "FROM Rankingtable " + 
          "GROUP BY teamId) grouped " + 
         "ON rt.teamId = grouped.teamId " + 
         "AND rt.lastupdate = grouped.MaxDateTime " + 
        "WHERE rt.lastupdate BETWEEN :from AND :to" 
      ) 

エラー:

Error in named query: findRankingsBetween: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: (near line 1, column 79 

JPQLで適切にクエリを記述するためにどのように?

+0

コンソールで生成されたクエリをチェックして、データベースのGUIにそのクエリを実行してみてください – silentprogrammer

答えて

6

this answerに記載されているように、JPQLのサブクエリはselect句とwhere句でのみ発生します。 Hibernate doc

JPQLで同等のクエリは次のとおりです。

"SELECT rt FROM Rankingtable rt " + 
"WHERE rt.lastupdate = (SELECT MAX(r2.lastupdate) " + 
         "FROM Rankingtable r2 " + 
         "WHERE r2.teamid = rt.teamid) " + 
"AND rt.lastupdate BETWEEN :from AND :to" 
関連する問題