3

Eclipseインディゴを使用していて、「JPA検証の問題」が発生しています。

私の名前付きクエリは次のとおりです。

from Person p where p.name = :name

そしてこのエラーがあります:

The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM.

ただし、これは有効なJPQLクエリです。誰かがこのエラーを取り除く方法を知っていますか?

クエリをに変更した場合

select p from Person p where p.name = :name

エラーはもうありませんが、すべてのクエリを変更したくありません。

ありがとう

mp5

4

4 に答える 4

8

移植性に関心がない場合は、IndigoリリースでDaliに追加されたJPQL検証をオフにすることができます。Hibernateプラットフォームが選択されたJPAプロジェクトがある場合でも、HibernateToolsがJPQL/HQLに対して持つ有効性はすべて取得されます。

「クエリとジェネレータ」の下のワークスペース設定「JavaPersistence」->「JPA->Errors/ Warnings」に移動し、「Invalid orincompleteJPQLquerys」を「Ignore」に変更します。HibernateプラットフォームのDaliJPQL検証を拡張したい場合、またはデフォルトでオフにしたい場合は、Hibernateツールに対してバグを入力できます。

于 2012-07-05T14:55:11.813 に答える
1

次の形式のクエリのように見えます。

from Person p where p.name = :name

実際には有効なJPQLではありません。の言語リファレンスによると:

http://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html

各ステートメントには、その部分の前にSELECTUPDATEまたはステートメントが必要です。DELETEFROM

その他の例は次のとおりです。

http://en.wikipedia.org/wiki/Java_Persistence_Query_Language

残念ながら、この形式に合うようにすべてのクエリを更新する必要があるようです。

于 2012-06-27T13:08:22.447 に答える
1

これは有効なJPQLクエリではありません。これは有効なHQLクエリですが、HQLはJPQLではありません。JPQLクエリにはselect句が必要です。

仕様からのJPQL句のBNF構文は次のとおりです。

select_statement :: = select_clause from_clause [where_clause] [groupby_clause [having_clause] [orderby_clause]
于 2012-06-27T13:08:37.500 に答える
1

そして実際、それは有効なJPQLクエリではありません。JPQLは、「SELECT」、「UPDATE」、または「DELETE」で始まります。

明らかに、Hibernate(つまり、HQL)で機能する可能性がありますが、そのクエリは標準ではなく、移植性もありません。したがって、クエリを変更したくない場合は、JPAを使用しておらず、アプリは移植性がありません。

JPA仕様はこれを確認します。

于 2012-06-27T13:06:14.037 に答える