【问题标题】:JPA @NamedQuery correlated subqueryJPA @NamedQuery 相关子查询
【发布时间】:2012-07-11 01:53:36
【问题描述】:

我正在尝试创建一个包含以下相关子查询的@NamedQuery

@NamedQuery(name = "Drcomments.findByOrderDesc", query = " SELECT a FROM ( SELECT ROWNUMBER() OVER(ORDER BY d.drcommentsPK.commentSecondaryCode DESC) AS EL_ROWNM , d.drcommentsPK.commentSecondaryCode , d.commentSecondaryCodeDescription FROM Drcomments d WHERE d.drcommentsPK.commentPrimaryCode = 1 ) a WHERE a.EL_ROWNM < 4 and a.EL_ROWNM > 0 ")})    

问题是我得到了这个错误:

"Exception [EclipseLink-8025] (Eclipse Persistence Services - 2.3.0.v20110604-r9504):  org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [Drcomments.findByOrderDesc:  SELECT a FROM ( SELECT ROWNUMBER() OVER(ORDER BY d.drcommentsPK.commentSecondaryCode DESC) AS EL_ROWNM , d.drcommentsPK.commentSecondaryCode , d.commentSecondaryCodeDescription FROM Drcomments d WHERE d.drcommentsPK.commentPrimaryCode = 1 ) a WHERE a.EL_ROWNM < 4 and a.EL_ROWNM > 0 ], line 1, column 15: unexpected token [(].
Internal Exception: org.eclipse.persistence.internal.jpa.parsing.jpql.InvalidIdentifierException"

@NamedQuery 是否支持相关子查询?如果是这样的话, 如何创建将执行此类查询的命名查询?

提前致谢。

【问题讨论】:

    标签: jpa jpa-2.0 jpql named-query


    【解决方案1】:

    @NamedQuery 不支持 SQL,它只支持 JPQL。您的查询显然不是 JQPL,因为它使用特定于数据库的语法,例如 ROWNUMBER()。此外,在 JPQL 中,子查询仅在 WHERE 和 HAVING 子句中受支持。

    请改用@NamedNativeQuery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多