1

@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は相関サブクエリをサポートしていますか?もしそうなら、どうすればこの種のクエリを実行する名前付きクエリを作成できますか?

前もって感謝します。

4

1 に答える 1

7

@NamedQueryはSQLをサポートせず、JPQLのみをサポートします。ROWNUMBER()のようなデータベース固有の構文を使用しているため、クエリは明らかにJQPLではありません。さらに、JPQLでは、サブクエリはWHERE句とHAVING句でのみサポートされます。

代わりに@NamedNativeQueryを使用してください。

于 2012-07-11T12:58:07.513 に答える