7

I have a case similar to the one described in this question, I wrote an identical query which works, but when I try to write it as a jpql named query, I'm getting an error.

My query:

@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:

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

How to write the query properly in jpql?

Community
  • 1
  • 1
Bartek Maraszek
  • 1,404
  • 2
  • 14
  • 31

1 Answers1

10

As noted in this answer, a subquery in JPQL can only occur in select and where clauses. Hibernate doc.

An equivalent query in JPQL is:

"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"
Community
  • 1
  • 1
Bartek Maraszek
  • 1,404
  • 2
  • 14
  • 31